繁体   English   中英

Google Glass:在普通卡片中触摸即可打开菜单

[英]Google Glass: open menu on touch in regular Card

我如何在普通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内部使用该信息来加载不同的项。 流程如下所示:

  1. 您在活动类中创建一个私有字段,该私有字段将存储最后一张被窃听的卡片的索引。
  2. onItemClick方法中,存储在该字段中给定的索引,然后调用openOptionsMenu
  3. 这将导致onPrepareOptionsMenu 重写该方法,并根据存储在该字段中的索引对菜单进行所需的任何修改(添加菜单,添加/删除项目等)。 您必须在onPrepareOptionsMenu而不是onCreateOptionsMenu内执行此onPrepareOptionsMenu ,因为您希望它在每次用户点击时发生,而不仅仅是在第一次初始化菜单时发生。
  4. 照常处理onOptionsItemSelected

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM