نظارات جوجل:فتح القائمة على اللمس في البطاقة العادية
-
21-12-2019 - |
سؤال
كيف يمكنني الحصول على القائمة المنبثقة بشكل منتظم Card
.لقد حاولت استخدام هذا الرمز:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
openOptionsMenu();
return true;
}
return false;
}
ولكن لا يبدو أن العمل.وأيضا هل من الممكن أن تضع Live Cards
في Activity
كما فعلت هنا.أعتقد أنني أستخدم Static Cards
, ولكن في النهاية سأحتاج إلى الوصول إلى وظائف الكاميرا والفيديو من خلال هذه البطاقات.
نشاط
public class NewChecklistActivity extends Activity {
private GestureDetector mGestureDetector;
private List<Card> mCards;
private CardScrollView mCardScrollView;
StepCardScrollAdapter adapter;
Intent checklistIntent;
String allStepsJSONString;
ArrayList<String[]> allStepsArray;
ArrayList<String[]> checklistsArray;
ArrayList<String[]> stepsArray;
ArrayList<String[]> checklistSteps;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
checklistsArray = (ArrayList<String[]>) this.getIntent().getSerializableExtra("checklists");
stepsArray = (ArrayList<String[]>) this.getIntent().getSerializableExtra("steps");
createCards();
mCardScrollView = new CardScrollView(this);
adapter = new StepCardScrollAdapter();
mCardScrollView.setAdapter(adapter);
mCardScrollView.activate();
setContentView(mCardScrollView);
mCardScrollView.setOnItemClickListener(adapter);
checklistIntent = new Intent(this, ChecklistActivity.class);
}
private void createCards() {
mCards = new ArrayList<Card>();
Card card;
String[] checklist;
for (int i = 0; i < checklistsArray.size(); i++) {
checklist = checklistsArray.get(i);
card = new Card(this);
card.setText(checklist[1]);
mCards.add(card);
}
}
private class StepCardScrollAdapter extends CardScrollAdapter implements OnItemClickListener {
@Override
public int findIdPosition(Object id) {
return -1;
}
@Override
public int findItemPosition(Object item) {
return mCards.indexOf(item);
}
@Override
public int getCount() {
return mCards.size();
}
@Override
public Object getItem(int position) {
return mCards.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return mCards.get(position).toView();
}
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
checklistIntent.putExtra("steps", getChecklistSteps(adapter.findItemPosition(position)));
startActivity(checklistIntent);
}
}
المحلول
يبدو أنك تستخدم CardScrollView
, ، والتي سوف تعترض جميع إيماءات لوحة اللمس وهذا هو السبب onKeyDown
لا يتم استدعاء الأسلوب.
لهذه الحالة المحددة، يمكنك إرفاق OnItemClickListener
إلى أداة تمرير البطاقة واستخدم هذا المستمع لمعرفة متى تم النقر على إحدى البطاقات.ثم اتصل openOptionsMenu
من هناك.
إذا كنت بحاجة إلى عناصر قائمة مختلفة لبطاقات مختلفة، فستحتاج إلى تخزين فهرس البطاقة التي يتم تمريرها إلى المستمع ثم استخدام تلك المعلومات بالداخل onPrepareOptionsMenu
لتحميل عناصر مختلفة.سيبدو التدفق كما يلي:
- يمكنك إنشاء حقل خاص في فصل النشاط الخاص بك والذي سيقوم بتخزين فهرس البطاقة الأخيرة التي تم النقر عليها.
- في الخاص بك
onItemClick
الطريقة، تقوم بتخزين الفهرس الذي تم تقديمه لك في هذا الحقل، ثم تقوم بالاتصال بهopenOptionsMenu
. - هذه تسبب
onPrepareOptionsMenu
ليتم استدعاؤها.تجاوز هذه الطريقة وقم بإجراء أي تعديلات تحتاجها على القائمة بناءً على الفهرس المخزن في هذا الحقل (تضخيم القائمة، وإضافة/إزالة العناصر، وما إلى ذلك).عليك أن تفعل هذا في الداخلonPrepareOptionsMenu
بدلاً منonCreateOptionsMenu
لأنك تريد أن يحدث ذلك كل الوقت الذي ينقر فيه المستخدم، وليس فقط في المرة الأولى التي يتم فيها تهيئة القائمة. - مقبض
onOptionsItemSelected
كما تفعل عادة.