我正在更新我的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上触发。
这个'activity'是一个SherlockFragment,它扩展了SherlockFragmentActivity
答案 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);