如何在常规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);
}
}
答案 0 :(得分:10)
看起来你正在使用CardScrollView
,它将拦截所有触摸板手势,这就是为什么你的onKeyDown
方法没有被调用的原因。
对于这种特定情况,您可以将OnItemClickListener
附加到卡片卷轴并使用该听众查找其中一张卡片被点击的时间。然后,从那里拨打openOptionsMenu
。
如果您需要为不同的卡片设置不同的菜单项,则需要存储传递给侦听器的卡片的索引,然后在onPrepareOptionsMenu
中使用该信息来加载不同的项目。流程看起来像这样:
onItemClick
方法中,存储您在该字段中提供的索引,然后拨打openOptionsMenu
。onPrepareOptionsMenu
被调用。覆盖该方法,并根据存储在该字段中的索引对菜单进行任何修改(夸大菜单,添加/删除项目等)。您必须在onPrepareOptionsMenu
而不是onCreateOptionsMenu
内执行此操作,因为您希望用户点按每个时间,而不仅仅是首次初始化菜单。onOptionsItemSelected
。