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"?>
点击下拉菜单总是会出现null指针。经发现是mShareActionProvider。
另外为啥点击后不能触发事件。进入对应自定义的ActionProvider。
配置文件
android:actionProviderClass="com.example.tabdemo.MyActionProvider"
这个不起作用?
难道还要自己在onOptionsItemSelected触发事件?
解决方案
我直接这样解决这个问题了。
@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); } }