0

FragmentAdapterとViewPageへの参照を保持するMainActivityがあります。このアクティビティでは、2つのフラグメントをリストに追加し、次にこのリストをFragmentAdapterに追加します。

fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));       
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));

これで、これら2つのフラグメントをうまくスライドさせることができます。実際、どちらもListFragmentsです。各フラグメントには、多くのアイテムがリストされています。

アイテムごとにクリックホールドするとメニューアイテムが表示されます。

発生する問題は、Fragment1で、Fragment1public boolean onContextItemSelected(MenuItem item)内で正常に呼び出されることです(このフラグメント内にブレークポイントが追加されました)。

Fragment2で同じテストを実行すると、Frag2からではなく、Frag1からのブレークポイントが呼び出されます。そして、明らかに、Frag1からのデータはFrag2に表示されます。

誰もがこれを見たことがありますか?

私は次のように両方のフラグメントでメニューをインスタンス化します。

@Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.add(Menu.NONE, R.id.share, Menu.NONE, getString(R.string.share));
        menu.add(Menu.NONE, R.id.delete, Menu.NONE, getString(R.string.delete_all));
    }

よろしく、フェリペ

4

1 に答える 1

2

基本的に、最初にインスタンス化されたフラグメントが優先されます。invalidateOptionsMenuを使用した解決策については、このリンクを参照してください。基本的に、オプションメニューは、Androidに無効であると通知するまで存続します。古いシステムでは、onPrepareOptionsMenuでメニューを変更できますが、アクションバーにはオプションメニューのアイコンがあるため、完全に破棄する必要があります。

したがって、新しいフラグメントにページングするときは、オプションメニューを無効にするだけです。古いデバイスの場合は、onPrepareOptionsMenuをチェックインして、表示されているフラグメントを確認し、それらのオプションを表示します。

于 2012-11-04T19:27:50.177 に答える