У меня есть линейная компоновка (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 из задней части стека, не будучи снова надутым с этими элементами?
Спасибо.
Ничего себе, это действительно работает, если я пополняю свой ArrayList в 'onCreate()'. Благодаря ! – Jecimi
+1. Да, я всегда думал, что 'onCreate' был заменен на' onActivityCreated' в фрагменте ... Думаю, мне нужно снова взглянуть на эту диаграмму жизненного цикла. Спасибо, узнал что-то новое сегодня! – Barak