我已经以编程方式添加了菜单项,现在我正在对它执行操作。但它显示空指针异常。
以下是代码
public boolean onPrepareOptionsMenu(com.actionbar.view.Menu menu) {
// TODO Auto-generated method stub
super.onPrepareOptionsMenu(menu);
if(flag){
menu.add(0, 9, 0, "").setIcon(android.R.drawable.ic_menu_search).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 1, 0, "Hindi").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 2, 0, "English").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 3, 0, "Gujarati").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 4, 0, "Punjabi").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 5, 0, "Bengali").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 6, 0, "Marathi").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 7, 0, "Talugu").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 8, 0, "Tamil").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
flag=false;
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
mSearchView = (SearchView) menu.findItem(9).getActionView();
mSearchView.setQueryHint(getResources().getString(R.string.search_hint));
mSearchView.setIconifiedByDefault(false);
mSearchView.setSubmitButtonEnabled(false);
((SearchView) searchItem.getActionView()).setIconified(true);
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mSearchView.setFocusable(false);
mSearchView.setQuery("", false);//
mSearchView.setIconified(true); //
mSearchView.clearFocus(); //
searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
mSearchView.setOnQueryTextListener(this);
mSearchView.clearFocus();
}
return true;
}
这是在mSearchView上给出null的地方。
mSearchView =(SearchView)menu.findItem(9).getActionView();
这是我的onOptionItemSelected
@Override
public boolean onOptionsItemSelected(com.actionbar.view.MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home: {
if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
mDrawerLayout.closeDrawer(mDrawerList);
} else {
mDrawerLayout.openDrawer(mDrawerList);
}
break;
}
case 0:
return true;
case 1:
if (Locale.getDefault().toString().equalsIgnoreCase("hi"))
{
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.hin_sel), Toast.LENGTH_LONG).show();
} else
{
String languageToLoad = "hi"; // language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
Intent in=new Intent(getBaseContext(), MainActivity.class);
startActivity(in);
finish();
}
return true;
case 2:
if (Locale.getDefault().toString().equalsIgnoreCase("en")||Locale.getDefault().toString().equals("en_IN")||Locale.getDefault().toString().equals("en_US"))
{
//Toast.makeText(getApplicationContext(),getResources().getString(R.string.Al_Eng_sel), Toast.LENGTH_LONG).show();
} else {
String languageToLoad = "en"; // language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
Intent in=new Intent(getBaseContext(), MainActivity.class);
startActivity(in);
finish();
}
return true;
default:
System.out.println(item.getItemId());
}
// QuickContactFragment dialog = new QuickContactFragment();
// dialog.show(getSupportFragmentManager(), "QuickContactFragment");
// return true;
return super.onOptionsItemSelected(item);
}
答案 0 :(得分:3)
向每个动态添加的项setOnMenuItemClickListener
添加:
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
super.onPrepareOptionsMenu(menu);
if(flag){
menu.add(0, 9, 0, "").setIcon(android.R.drawable.ic_menu_search).setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 1, 0, "Hindi").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 2, 0, "English").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 3, 0, "Gujarati").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 4, 0, "Punjabi").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 5, 0, "Bengali").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 6, 0, "Marathi").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 7, 0, "Talugu").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
menu.add(0, 8, 0, "Tamil").setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).setOnMenuItemClickListener(this);
flag=false;
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
mSearchView = (SearchView) menu.findItem(9).getActionView();
mSearchView.setQueryHint(getResources().getString(R.string.search_hint));
mSearchView.setIconifiedByDefault(false);
mSearchView.setSubmitButtonEnabled(false);
((SearchView) searchItem.getActionView()).setIconified(true);
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mSearchView.setFocusable(false);
mSearchView.setQuery("", false);//
mSearchView.setIconified(true); //
mSearchView.clearFocus(); //
searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS| MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
mSearchView.setOnQueryTextListener(this);
mSearchView.clearFocus();
}
使用OnMenuItemClickListener
实施您的活动并覆盖onMenuItemClick
,如:
@Override
public boolean onMenuItemClick(MenuItem item) {
if(item.getTitle().equals("hindi")){
//do something
}
return true;
}
您还可以在商品ID上设置开关案例:
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case 0:
//do something
break;
default:
break;
}
return true;
}
答案 1 :(得分:0)
覆盖片段/活动中的onOptionsItemSelected()方法