我现在以编程方式添加了菜单项,如何对其执行操作



我已经以编程方式添加了菜单项,现在我正在对其执行操作。但它显示空指针异常。

下面是代码

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);
}

对于每个动态添加的项目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;
}

在片段/活动中覆盖 onOptionsItemSelected() 方法

最新更新