【发布时间】:2012-06-12 17:12:21
【问题描述】:
我有一个线性布局(skeleton.xml 中的layout_container),它在创建活动时用 ListFragment(menufragment)膨胀。然后,当用户执行点击时,此布局将替换为另一个 ListFragment (albumsfragment)。
问题是,当我按下后退按钮时,我确实回到了 menufragment 但列表长了两倍,因为它再次被相同的项目填满了。我怎样才能避免这种情况?
OnCreate 方法,在 Activity 内部:
/** 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();
}
Activity内部的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();
}
我的 Fragment 类代码:
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 的再次添加而增长。
我尝试在 MenuFragment 的事务之前添加检查 if (savedInstanceState == null) 但没有改变任何东西。
我应该怎么做才能让 MenuFragment 从后面的 Stack 中弹出而不被这些项目再次膨胀?
谢谢。
【问题讨论】:
标签: android android-listview android-listfragment