我有一个线性布局(skeleton.xml中为layout_container
),在创建活动时会使用ListFragment(menufragment
)进行膨胀。然后,当用户执行单击时,此布局将替换为另一个ListFragment(albumsfragment
)。
问题在于,当我按下后退按钮时,我确实回到菜单片段,但列表的长度是两倍,因为它已经用相同的项目再次填充。我怎么能避免这个?
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的再次添加而增长。
我尝试在MenuFragment交易之前添加支票if (savedInstanceState == null)
,但不会改变任何内容。
我应该怎样做才能让DreamFragment从后面的堆栈中弹出而不会再次使用这些项目充气?
感谢。
答案 0 :(得分:3)
看看Fragment lifecycle。每次返回onActivityCreated()
时都会调用Fragment
。相反,请尝试将您的实施移至onCreate()
,这应该可以解决您的重复问题。
答案 1 :(得分:0)
也许您还可以检查arraylist的大小,然后在填充arrayList之前将其清除onActivityCreated()。
if(m_parts != null && m_parts.size()>0){
//Clear the contents of the arrayList m_parts
m_parts.clear();
}
然后将数据添加到arrayList。