2012-06-12 3 views
0

У меня есть линейная компоновка (layout_container в skeleton.xml), которая завышена с помощью ListFragment (menufragment), когда действие создано. Затем, когда пользователь выполняет щелчок, этот макет заменяется другим ListFragment (albumsfragment).ListFragment раздувается дважды

Проблема в том, что когда я нажимаю кнопку «Назад», я возвращаюсь к меню, но список в два раза длиннее, потому что он снова заполнен теми же элементами. Как я мог избежать этого?

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, список в MenuFragment растет, поскольку item1, item2, item3, item4 добавляются еще раз.

Я попытался добавить чек if (savedInstanceState == null) перед транзакцией MenuFragment, но ничего не меняет.

Что делать, чтобы вызывать MenuFragment из задней части стека, не будучи снова надутым с этими элементами?

Спасибо.

ответ

3

Посмотрите на Fragment lifecycle. onActivityCreated() будет называться каждый раз при возврате на Fragment. Попробуйте вместо этого переместить вашу реализацию на onCreate(), и это должно устранить проблему с дублированием.

+0

Ничего себе, это действительно работает, если я пополняю свой ArrayList в 'onCreate()'. Благодаря ! – Jecimi

+0

+1. Да, я всегда думал, что 'onCreate' был заменен на' onActivityCreated' в фрагменте ... Думаю, мне нужно снова взглянуть на эту диаграмму жизненного цикла. Спасибо, узнал что-то новое сегодня! – Barak

0

Возможно, вы также можете проверить размер arraylist, а затем очистить его onActivityCreated() перед заполнением массиваList.

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

     //Clear the contents of the arrayList m_parts 

      m_parts.clear(); 
     } 

А затем добавьте данные в массивList.

Смежные вопросы