java - actionbar下拉菜单的问题
PHP中文网
PHP中文网 2017-04-17 11:34:27
[Java讨论组]
getMenuInflater().inflate(R.menu.options, menu);  


//搜索视窗,因为showAsAction="ifRoom",所以图三中出现了搜索按钮  
 SearchView searchView = (SearchView) menu.findItem(R.id.menu_search)  
    .getActionView();  

//分享视窗,因为showAsAction="never",所以只能在溢出菜单中才看见到  
ShareActionProvider mShareActionProvider = (ShareActionProvider) menu  
    .findItem(R.id.menu_share).getActionProvider();  
Intent shareIntent = new Intent(Intent.ACTION_SEND);  
shareIntent.setType("image/*");  
mShareActionProvider.setShareIntent(shareIntent);  

//设置视窗,MyActionProvider就是我们自定义的ActionProvider  
MyActionProvider myactionprovider = (MyActionProvider) menu.findItem(  
    R.id.menu_setting).getActionProvider();  
return super.onCreateOptionsMenu(menu);  

<?xml version="1.0" encoding="utf-8"?>

<item
    android:id="@+id/menu_search"
    android:actionViewClass="android.widget.SearchView"
    android:icon="@drawable/ic_menu_search"
    android:showAsAction="ifroom"
    android:title="搜索"/>
<item
    android:id="@+id/menu_share"
    android:actionProviderClass="android.widget.ShareActionProvider"
    android:showAsAction="never"
    android:title="分享"/>
<item
    android:id="@+id/menu_setting"
    android:actionProviderClass="com.example.tabdemo.MyActionProvider"
    android:showAsAction="never"
    android:title="设置">
    <menu>
        <item
            android:id="@+id/menu_theme"
            android:actionProviderClass="com.example.tabdemo.MyActionProvider"
            android:showAsAction="always|withText"
            android:title="更换主题"/>
        <item
            android:id="@+id/menu_system"
            android:actionProviderClass="com.example.tabdemo.MyActionProvider"
            android:showAsAction="always|withText"
            android:title="系统设置"/>
    </menu>
</item>

点击下拉菜单总是会出现null指针。经发现是mShareActionProvider。
另外为啥点击后不能触发事件。进入对应自定义的ActionProvider。
配置文件
android:actionProviderClass="com.example.tabdemo.MyActionProvider"
这个不起作用?

难道还要自己在onOptionsItemSelected触发事件?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(1)
PHP中文网

我直接这样解决这个问题了。

   @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        switch (item.getItemId()) {
            case R.id.menu_share:
                transaction.replace(R.id.container, ShareFragment.newInstance());
                transaction.commit();
                return true;
            case R.id.menu_setting:
                transaction.replace(R.id.container, SettingFragment.newInstance());
                transaction.commit();
                return true;
            case R.id.menu_feedback:
                FeedbackAgent agent = new FeedbackAgent(this);
                agent.startFeedbackActivity();
                transaction.commit();
                return true;
            case R.id.menu_about:
                new AlertDialog.Builder(MainActivity.this)
                        .setTitle("关于")
                        .setMessage("")
                        .setPositiveButton("确定", null)
                        .show();
            default:
                transaction.commit();
                return super.onOptionsItemSelected(item);
           }
        }
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号