2 つの ListFragments (実際には A と B SherlockListFragments
) があり、両方のフラグメントにブレークポイントを設定するとonCreateOptionsMenu
、フラグメント A は 3 回ヒットし、フラグメント B は 2 回ヒットします。さらに、AsyncTask
実行中にメニュー アイコンの 1 つをアニメーション化しています。フラグメント A の項目を選択するonCreateOptionsMenu
と、再び呼び出され、アイコンが 2 倍になります。
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);
}
}