我已经添加菜单项编程现在怎么上执行动作 [英] i have added menu item programatically now how to perform action on it

查看:154
本文介绍了我已经添加菜单项编程现在怎么上执行动作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我添加菜单项编程现在即时通讯上它。但是它显示空指针异常进行操作。

下面是code

  prepareOptionsMenu(com.actionbar.view.Menu菜单)公共布尔{
    // TODO自动生成方法存根
    super.on prepareOptionsMenu(菜单);
    如果(标志){
    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,印地文)setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)。
    menu.add(0,2,0,英语)setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)。
    menu.add(0,3,0,古吉拉特)setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)。
    menu.add(0,4,0,旁遮普)setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)。
    menu.add(0,5,0,孟加拉语)setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)。
    menu.add(0,6,0,马拉)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,泰米尔语)setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW)。
    标志= FALSE;    SearchManager的SearchManager的=(SearchManager的)getSystemService(Context.SEARCH_SERVICE);
    mSearchView =(搜索查看)menu.findItem(9).getActionView();
    mSearchView.setQueryHint(getResources()的getString(R.string.search_hint));
    mSearchView.setIconifiedByDefault(假);
    mSearchView.setSubmitButtonEnabled(假);
    ((搜索查看)searchItem.getActionView())setIconified(真)。
    mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    mSearchView.setFocusable(假);
    mSearchView.setQuery(,FALSE); //
    mSearchView.setIconified(真); //
    mSearchView.clearFocus(); //
    sea​​rchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);    mSearchView.setOnQueryTextListener(本);
    mSearchView.clearFocus();    }    返回true;}

这是它在mSearchView给空。

mSearchView =(搜索查看)menu.findItem(9).getActionView();

这是我的onOptionItemSelected

  @覆盖
公共布尔onOptionsItemSelected(com.actionbar.view.MenuItem项){    开关(item.getItemId()){    案例android.R.id.home:{
        如果(mDrawerLayout.isDrawerOpen(mDrawerList)){
            mDrawerLayout.closeDrawer(mDrawerList);
        }其他{
            mDrawerLayout.openDrawer(mDrawerList);
        }
        打破;
    }    情况下0:
        返回true;
    情况1:
        如果(Locale.getDefault()。的toString()。equalsIgnoreCase(HI))
        {            //Toast.makeText(getApplicationContext(),getResources().getString(R.string.hin_sel),Toast.LENGTH_LONG).show();        }其他
        {
            字符串languageToLoad =HI; // 语言
            区域设置区域=新区域(languageToLoad);
            Locale.setDefault(区域);
            配置配置=新配置();
            config.locale =区域;
            getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
            在意向=新意图(getBaseContext(),MainActivity.class);
            startActivity(在);
            完();        }
        返回true;    案例2:
        如果(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();        }其他{            字符串languageToLoad =EN; // 语言
            区域设置区域=新区域(languageToLoad);
            Locale.setDefault(区域);
            配置配置=新配置();
            config.locale =区域;
            getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
            在意向=新意图(getBaseContext(),MainActivity.class);
            startActivity(在);
            完();
        }        返回true;    默认:
        的System.out.println(item.getItemId());    }
        // QuickContactFragment对话框=新QuickContactFragment();
        // dialog.show(getSupportFragmentManager(),QuickContactFragment);
        //返回true;    返回super.onOptionsItemSelected(项目);
}


解决方案

要每个动态添加的项目 setOnMenuItemClickListener 这样的:

  prepareOptionsMenu(菜单菜单)上公共布尔{
        // TODO自动生成方法存根
        super.on prepareOptionsMenu(菜单);
        如果(标志){
        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(本);
        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);
        标志= FALSE;        SearchManager的SearchManager的=(SearchManager的)getSystemService(Context.SEARCH_SERVICE);
        mSearchView =(搜索查看)menu.findItem(9).getActionView();
        mSearchView.setQueryHint(getResources()的getString(R.string.search_hint));
        mSearchView.setIconifiedByDefault(假);
        mSearchView.setSubmitButtonEnabled(假);
        ((搜索查看)searchItem.getActionView())setIconified(真)。
        mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        mSearchView.setFocusable(假);
        mSearchView.setQuery(,FALSE); //
        mSearchView.setIconified(真); //
        mSearchView.clearFocus(); //
        sea​​rchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);        mSearchView.setOnQueryTextListener(本);
        mSearchView.clearFocus();}

OnMenuItemClickListener 实施你的活动,并覆盖 onMenuItemClick 这样的:

  @覆盖
公共布尔onMenuItemClick(菜单项项){
    如果(item.getTitle()。等于(印地文)){
        //做一点事
    }
    返回true;
}

您也可以对项目ID的开关情况:

  @覆盖
公共布尔onMenuItemClick(菜单项项){
    开关(item.getItemId()){
    情况下0:
        //做一点事
        打破;    默认:
        打破;
    }
    返回true;
}

i have added menu item programatically now im performing action on it.But it is showing null pointer exception.

Below is the code

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;

}

This is where it is giving null at mSearchView.

mSearchView = (SearchView) menu.findItem(9).getActionView();

This is my 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);
}

解决方案

To each dynamically added item setOnMenuItemClickListener like:

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

}

Implement your activity with OnMenuItemClickListener and override onMenuItemClick like:

@Override
public boolean onMenuItemClick(MenuItem item) {
    if(item.getTitle().equals("hindi")){
        //do something
    }
    return true;
}

You can also have a switch case on item id:

    @Override
public boolean onMenuItemClick(MenuItem item) {
    switch (item.getItemId()) {
    case 0:
        //do something
        break;

    default:
        break;
    }
    return true;
}

这篇关于我已经添加菜单项编程现在怎么上执行动作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆