0

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

我的解决方案不起作用。

所以,我正在使用 ActionBarSherlock。

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

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

这是一个屏幕截图。顶部微调器是新的;紫色块中的所有内容都可以进行比较。

在此处输入图像描述

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

@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 上触发。

此“活动”是从 SherlockFragmentActivity 扩展的 SherlockFragment

4

2 回答 2

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 可能应该将上下文指向操作栏。

即使问题不是,这个特定的答案也与比较相关

于 2013-04-26T22:47:45.857 回答
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);
于 2013-04-27T19:54:01.277 回答