【发布时间】:2017-07-08 06:20:12
【问题描述】:
我正在开发这个简单的 Android 应用程序。我在操作栏上有三个菜单项,每个菜单项在单击它们时都会膨胀 3 个不同的片段。
我的问题:当我单击一个菜单项时,我希望该菜单项的图标更改为 drawables 文件夹中的另一个图标,并保持这种状态,直到我单击另一个菜单项,然后它将更改为第一个图标在我点击它之前。
我尝试使用带有“state_pressed”的选择器 .xml,当我单击菜单项时,它会更改图标一秒钟,但一旦我停止单击,它就会返回到第一个图标。您可以在下面找到相关代码。如果您能帮我解决这个问题,我将不胜感激。
submenu.xml (操作栏菜单):
<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" >
<item
android:id="@+id/action_todo"
android:title=""
android:icon="@drawable/action_bar_selector"
app:showAsAction="always" />
</menu>
action_bar_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/ic_check_box_white_24dp"
android:state_pressed="true" />
<item
android:drawable="@drawable/ic_check_box_white_24dp_unpressed" />
</selector>
ProjectTodo.java (Fragment 类中的 Inflating Action Bar):
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
inflater.inflate(R.menu.submenu, menu);
}
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
if(id == R.id.action_back){
ProjectDetails frag = new ProjectDetails();
ProjectMainListFragmentChanger fragInterface = (ProjectMainListFragmentChanger) getActivity();
fragInterface.projectMainListChangeFragment(frag);
return false;
}
if(id == R.id.action_details){
return true;
}
if(id == R.id.action_todo){
ProjectDetails frag = new ProjectDetails();
ProjectTodoFragmentChanger fragInterface = (ProjectTodoFragmentChanger) getActivity();
fragInterface.projectTodoChangeFragment(frag);
return false;
}
return super.onOptionsItemSelected(item);
}
您可以看到当前应用程序的快速 .gif 图像。当我点击菜单项时,它只变为第二个图标一秒钟,然后又回到原来的图标:
【问题讨论】:
-
操作栏为每个活动创建一次。每当您需要更改操作栏中的某些内容时,您都需要使操作栏无效。因此,每当您单击图标时,都会重新填充菜单项并使操作栏无效
标签: java android xml android-studio mobile