4

我有两个 ListFragment (A 和 B,实际上是SherlockListFragments),当我在两个片段中放置断点时onCreateOptionsMenu,片段 A 被命中 3 次,片段 B 被命中 2 次。此外,我正在为其中一个菜单图标设置动画AsyncTask,如果我在 Fragment A 中选择一个项目,onCreateOptionsMenu则会再次调用该图标并且图标加倍:

在此处输入图像描述

我不确定为什么onCreateOptionsMenu会再次调用,因为我只是在“详细信息”片段中调用一个方法:

@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);
    }
}
4

1 回答 1

5

从文档中:

“系统调用 onCreateOptionsMenu() 后,它会保留您填充的菜单的一个实例,并且不会再次调用 onCreateOptionsMenu(),除非菜单由于某种原因而无效。但是,您应该仅使用 onCreateOptionsMenu() 来创建初始菜单状态并且不要在活动生命周期中进行更改。”

我的猜测是菜单因您正在做的事情而失效。fragment.displayItems() 有什么作用?

于 2012-04-17T15:41:58.367 回答