Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Google Glass:在普通卡中打开触摸菜单_Android_Menu_Google Glass_Google Gdk - Fatal编程技术网

Android Google Glass:在普通卡中打开触摸菜单

Android Google Glass:在普通卡中打开触摸菜单,android,menu,google-glass,google-gdk,Android,Menu,Google Glass,Google Gdk,如何在常规卡上弹出菜单。我已尝试使用此代码: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { openOptionsMenu(); return true; } return false; } 但它似乎不起作用。另外,是否可以像我在这里做的那样,将实

如何在常规
卡上弹出菜单
。我已尝试使用此代码:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
          openOptionsMenu();
          return true;
     }
     return false;
}
但它似乎不起作用。另外,是否可以像我在这里做的那样,将
实时卡
放入
活动
。我相信我正在使用
静态卡
,但最终我需要通过这些卡访问摄像头和视频功能

活动

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);
    }
}
公共类NewChecklistActivity扩展活动{
私人手势检测器mGestureDetector;
私有列表mCards;
私有卡滚动视图mCardScrollView;
步进卡式适配器;
意向检查表意向;
字符串allStepsJSONString;
ArrayList allStepsArray;
arraylistchecklistsarray;
ArrayList stepsArray;
ArrayList检查列表步骤;
@抑制警告(“未选中”)
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
checklistsArray=(ArrayList)this.getIntent().getSerializableExtra(“检查列表”);
stepsArray=(ArrayList)this.getIntent().getSerializableExtra(“步骤”);
createCards();
mCardScrollView=新的CardScrollView(此);
适配器=新的StepCardScrollAdapter();
mCardScrollView.setAdapter(适配器);
mCardScrollView.activate();
setContentView(mCardScrollView);
setOnItemClickListener(适配器);
checklistIntent=新的意图(这个,ChecklistActivity.class);
}
私人信用卡(){
mCards=newarraylist();
卡片;
字符串[]检查表;
对于(int i=0;i
看起来您正在使用一个
CardScrollView
,它将拦截所有触摸板手势,这就是为什么您的
onKeyDown
方法没有被调用的原因

对于这种特殊情况,您可以将一个
OnItemClickListener
连接到卡片滚动器,并使用该侦听器来确定何时点击了其中一张卡片。然后,从那里调用
OpenOptions Menu

如果需要为不同的卡设置不同的菜单项,则需要存储传递给侦听器的卡的索引,然后使用
onPrepareOptionsMenu
中的信息加载不同的项。流程如下所示:

  • 在activity类中创建一个私有字段,该字段将存储最后点击的卡的索引
  • onItemClick
    方法中,存储该字段中给定的索引,然后调用
    openoptions菜单
  • 这将导致调用
    onPrepareOptions功能表
    。重写该方法,并根据该字段中存储的索引对菜单进行所需的任何修改(膨胀菜单、添加/删除项目等)。您必须在
    OnPrepareOptions功能表中执行此操作,而不是在
    OnCreateOptions功能表中执行此操作,因为您希望每次用户点击时都执行此操作,而不仅仅是在第一次初始化功能表时
  • 像平常一样处理选项项Selected

  • 看起来您正在使用一个
    CardScrollView
    ,它将拦截所有触摸板手势,这就是为什么您的
    onKeyDown
    方法没有被调用的原因

    对于这种特殊情况,您可以将一个
    OnItemClickListener
    连接到卡片滚动器,并使用该侦听器来确定何时点击了其中一张卡片。然后,从那里调用
    OpenOptions Menu

    如果需要为不同的卡设置不同的菜单项,则需要存储传递给侦听器的卡的索引,然后使用
    onPrepareOptionsMenu
    中的信息加载不同的项。流程如下所示:

  • 在activity类中创建一个私有字段,该字段将存储最后点击的卡的索引
  • onItemClick
    方法中,存储该字段中给定的索引,然后调用
    openoptions菜单
  • 这将导致调用
    onPrepareOptions功能表
    。重写该方法,并根据该字段中存储的索引对菜单进行所需的任何修改(膨胀菜单、添加/删除项目等)。您必须在
    OnPrepareOptions功能表中执行此操作,而不是在
    OnCreateOptions功能表中执行此操作,因为您希望每次用户点击时都执行此操作,而不仅仅是在第一次初始化功能表时
  • 像平常一样处理选项项Selected

  • 现在工作很好。我在上面添加了我的工作代码。感谢
    CardScrollView
    截取所有触摸板手势的帮助和信息。我有一个问题,关于让
    onItemClickLister
    获取正确的项目。我正在尝试传递一个
    ArrayList
    ,其中包含与所单击的卡相关的项目。Ho我应该存储传递给侦听器的卡的索引吗?我为上面的
    CardScrollAdapter
    添加了代码。谢谢!如果