我有一个刷新图标在我的菜单,当点击将刷新活动的内容。但问题是,刷新图标仍然是可点击的,而它是刷新我不想要的。这是我的menu.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"
tools:context=".MainActivity">
<item
android:id="@+id/action_refresh"
android:orderInCategory="100"
android:icon="@mipmap/ic_refresh"
android:enabled="true"
android:title="@string/action_settings"
app:showAsAction="always"/>
这里是我处理图标点击事件的地方
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_refresh) {
// getData() fetches the data and updates the display
getData();
return true;
}
return super.onOptionsItemSelected(item);
}
还有,有没有一种方法可以让图标变暗,这样用户就知道他们已经点击了图标?
单击图标时,使用菜单项的isEnabled()
方法检查当前是否启用。如果是,则禁用它,直到加载数据。一旦数据加载成功,您就可以再次启用它。例子:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(item.isEnabled()) {
// "Dim" the icon like you said. You can use other alpha values if you like.
item.getIcon().setAlpha(130);
// Disable the menu icon
item.setEnabled(false);
}
getData();
return true;
}
return super.onOptionsItemSelected(item);
}
现在,您说您有一个getData()
方法,它在获取数据后更新显示。获取数据后,检查Menuitem
是否关闭。如果已禁用,则重新启用它。例子:
if(item != null && item.isEnabled() == false) {
// "Undim" the icon
item.getIcon().setAlpha(255);
// Enable it again
item.setEnabled(true);
}
您可以使用setEnabled(true)方法来启用/禁用菜单项
您可以创建第二个menu.xml
,在单击刷新按钮之后使用。要强制重画菜单,调用invalidateOptionsMenu();
在第二个menu.xml
中,刷新按钮可以被禁用,或者切换到另一个按钮,指示用户刷新正在进行中。
解决这个问题最简单的方法是在activity中保持菜单项。
private MenuItem mRefreshItem;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater infl = new MenuInflater(this);
infl.inflate(R.menu.menu, menu);
mRefreshItem = menu.findItem(R.id.action_refresh);
return super.onCreateOptionsMenu(menu);
}
/** Call this when you begin or end loading */
private void setRefreshEnabled(boolean enabled) {
mRefreshItem.setEnabled(enabled);
}