捕获optionsMenu spinner点击

时间:2013-04-26 21:54:56

标签: android actionbarsherlock

我正在更新我的api 8+应用程序,原因是目标市场的大部分区域不再在其设备上有菜单按钮。

我的解决方案无效。

所以,我正在使用ActionBarSherlock。

我已将我需要的按钮移动到Sherlock菜单中,它们正常工作。

但我正在改变的活动有一个Spinner,它改变了返回的数据。 我正在尝试将Spinner添加到Sherlock菜单中(它确实出现了),但我无法捕获它上面的任何点击。

这是截图。顶部旋转器是新的旋转器;紫色块中的所有东西都可供比较。

enter image description here

这是我正在使用的代码设置菜单并捕获点击次数:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    menu.add(0, 1, 1, "Add Sleep Record").setIcon(R.drawable.btn_add)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

    menu.add(0, 2, 2, "Create Report").setIcon(R.drawable.ic_listview_pdf)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);


    Spinner spinner = new Spinner(getSherlockActivity().getSupportActionBar()
            .getThemedContext());
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity()
            .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_item,
            new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"});
    spinnerArrayAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
    spinner.setAdapter(spinnerArrayAdapter);

    menu.add(0, 3, 3, "Date Range")
    .setActionView(spinner).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
}

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
    case 1:
        Intent i=new Intent(getActivity(), SleepRecordAddActivity.class);
        startActivity(i);
        return true;
    case 2:
        tryCreateReport();
        return true;
    case 3:
        String boop ="I am here";

        String x= boop;
        return true;
    }
    return false;

}

我已将Spinner id设置为3,但onOptionsItemSelected上的开关不会在3上触发。

这个'activity'是一个SherlockFragment,它扩展了SherlockFragmentActivity

2 个答案:

答案 0 :(得分:0)

您将ArrayAdapter上下文指向操作栏而不是当前正在编写方法的类。

ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity()
        .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_item,
        new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"});

第一个参数可能应该是this。那就是说上面的Spinner可能应该在操作栏上指向上下文。

This particular answer is also relevant to compare with even if the question isn't

答案 1 :(得分:0)

嗯,事实证明它根本没有访问onOptionsItemSelected。您只需像往常一样添加OnItemSelectedListener。

Spinner spinner = new Spinner(getSherlockActivity().getSupportActionBar()
            .getThemedContext());
    ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getSherlockActivity()
            .getSupportActionBar().getThemedContext(), R.layout.sherlock_spinner_dropdown_item,
            new String[]{"Last 7 days", "Last month", "Last 6 months", "Last year"});
    spinnerArrayAdapter.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);
    spinner.setAdapter(spinnerArrayAdapter);
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            switch (position) {
                    //do stuff
                }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
            //do stuff                
        }

    });

    menu.add(0, 3, 3, "Date Range")
    .setActionView(spinner).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);