0

アクティビティが作成されるときにlayout_containerListFragment( )で拡張される線形レイアウト( skeleton.xml内)があります。menufragment次に、ユーザーがクリックを実行すると、このレイアウトは別のListFragment(albumsfragment)に置き換えられます。

問題は、戻るボタンを押すと、実際にメニューフラグメントに戻りますが、同じアイテムで再びいっぱいになっているため、リストが2倍長くなることです。どうすればこれを回避できますか?

アクティビティ内のOnCreateメソッド

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.skeleton);

        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();      
        MenuFragment menufragment = new MenuFragment();  
        fragmentTransaction.add(R.id.layout_container, menufragment, "menufragment");      
        fragmentTransaction.commit();

        }

アクティビティ内のOnClickメソッド

  public void OnMenuClick() {

AlbumsFragment albumsfragment = new AlbumsFragment(); 
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.layout_container, albumsfragment, "albumsfragment");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

}

私のフラグメントクラスコード:

public class MenuFragment extends ListFragment{

ArrayList<MenuItem> m_parts = new ArrayList<MenuItem>();

     @Override
        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            MenuAdapter m_adapter;

            m_parts.add(new MenuItem ("item1"));
            m_parts.add(new MenuItem ("item2"));
            m_parts.add(new MenuItem ("item3"));
            m_parts.add(new MenuItem ("item4"));


            m_adapter = new MenuAdapter(getActivity(), R.layout.menu_row, m_parts);
            setListAdapter(m_adapter);

したがって、AlbumFragmentからMenuFragmentに戻るたびに、item1、item2、item3、item4がもう一度追加されると、MenuFragmentのリストが大きくなります。

MenuFragmentのトランザクションの前にチェックを追加しようとしましif (savedInstanceState == null)たが、何も変更されません。

これらのアイテムで再び膨らませることなく、MenuFragmentをバックスタックからポップアップさせるにはどうすればよいですか?

ありがとう。

4

2 に答える 2

3

フラグメントのライフサイクルを見てください。onActivityCreated()に戻るたびに呼び出されますFragment。代わりに、実装をonCreate()and に移動してみてください。これにより、重複の問題が解決するはずです。

于 2012-06-12T17:31:32.327 に答える
0

おそらく、arraylist のサイズを確認してから、arrayList に入力する前に onActivityCreated() をクリアすることもできます。

     if(m_parts != null && m_parts.size()>0){

        //Clear the contents of the arrayList m_parts

          m_parts.clear();
       }

そして、データを arrayList に追加します。

于 2012-06-12T18:00:13.617 に答える