我有一个带有以下代码的“菜单”资源“ menu_test”:
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".TestActivity" >
<item android:id="@+id/hideshow"
android:title="Body visbility"
android:orderInCategory="100"
android:icon="@drawable/showicon"
app:showAsAction="always" />
</menu>
在我的activity.java文件中,将“ onCreate”函数中的工具栏膨胀,并添加一个点击侦听器:
private Toolbar toolbar;
...
toolbar = (Toolbar)findViewById(R.id.toolbarId);
toolbar.inflateMenu(R.menu.menu_test);
toolbar.setOnMenuItemClickListener(this);
我想获取“ hideshow”的ID并更改图标:
testItem = (MenuItem) toolbar.findViewById(R.id.hideshow);
testItem.setIcon(R.drawable.hideicon);
但是,在第一行获取ID时,应用崩溃。在点击侦听器功能中,它可以正常运行,因为ID是随点击内部提供的:
public boolean onMenuItemClick(MenuItem item)
item.setIcon(R.drawable.hideicon);
那么,如何更改onCreate函数中的图标?(“ findItem”不起作用,因为工具栏不是菜单)
我可能会更容易以编程方式添加菜单项,因此您可以维护对它们的引用:
public class MainActivity extends AppCompatActivity {
private static final int MENU_SETTINGS = Menu.FIRST;
MenuItem menuItem;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menuItem = menu.add(0, MENU_SETTINGS, 0, R.string.action_settings).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case MENU_SETTINGS:
// DO SOMETHING
break;
}
return super.onOptionsItemSelected(item);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句