android – onCreateOptionsMenu用片段命中倍数
作者:互联网
我有两个ListFragments(A和B,实际上是SherlockListFragments),当我在两个片段中的onCreateOptionsMenu中放置一个断点时,片段A被击中3次而片段B被击中2次.另外,当AsyncTask正在运行时,我正在为菜单图标设置动画,如果我在片段A中选择一个项目,则再次调用onCreateOptionsMenu并将图标加倍:
我不确定为什么再次调用onCreateOptionsMenu因为我只是在“details”片段中调用一个方法:
@Override
public void onListItemClick(final ListView l, final View v, final int position, final long id)
{
DetailsFragment fragment = (DetailsFragment)getFragmentManager().findFragmentById(R.id.fragmentDetails);
if (fragment != null && fragment.isInLayout())
{
fragment.DisplayItems();
}
else
{
final Intent listing = new Intent(activity.getApplicationContext(), DetailsFragmentActivity.class);
startActivity(listing);
}
}
更新:
我正在使用此代码为菜单项设置动画:
private MenuItem refreshItem;
private void DoRefresh()
{
final LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final ImageView ivRefresh = (ImageView)inflater.inflate(R.layout.refresh_view, null);
final Animation rotation = AnimationUtils.loadAnimation(activity, R.anim.refresh);
ImageView ivRefresh.startAnimation(rotation);
refreshItem.setActionView(ivRefresh);
//AsyncTask is kicked off here
}
@Override
public boolean onOptionsItemSelected(final MenuItem item)
{
if (item.getItemId() == R.id.refresh) {
refreshItem = item;
this.DoRefresh();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
解决方法:
从文档:
“在系统调用onCreateOptionsMenu()之后,它会保留您填充的菜单的实例,并且不会再次调用onCreateOptionsMenu(),除非由于某种原因菜单无效.但是,您应该仅使用onCreateOptionsMenu()来创建初始菜单状态而不是在活动生命周期中做出改变.“
我的猜测是,你正在做的事情使菜单无效. fragment.displayItems()有什么作用?
标签:android,android-fragments,actionbarsherlock,android-menu 来源: https://codeday.me/bug/20190626/1291010.html