Android 这个碎片膨胀了两次
我有一个线性布局(Android 这个碎片膨胀了两次,android,android-listview,android-listfragment,Android,Android Listview,Android Listfragment,我有一个线性布局(layout\u container,在skeleton.xml中),在创建活动时,该布局使用ListFragment(menufragment)进行膨胀。然后,当用户执行单击时,此布局将替换为另一个ListFragment(albumsfragment) 问题是,当我按下“后退”按钮时,我确实会返回到菜单片段,但列表的长度是原来的两倍,因为列表中再次填充了相同的项目。我怎样才能避免这种情况 活动内部的OnCreate方法: /** Called when the ac
layout\u container
,在skeleton.xml中),在创建活动时,该布局使用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();
}
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();
}
活动内部的OnClick方法:
/** 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();
}
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);
公共类MenuFragment扩展了ListFragment{
ArrayList m_parts=新的ArrayList();
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
菜单适配器m_适配器;
m_零件添加(新菜单项(“第1项”);
m_零件添加(新菜单项(“第2项”);
m_零件添加(新菜单项(“第3项”);
m_零件添加(新菜单项(“第4项”);
m_adapter=new MenuAdapter(getActivity(),R.layout.menu_行,m_部件);
setListAdapter(m_适配器);
所以每次我从AlbumFragment返回到MenuFragment,MenuFragment中的列表都会随着item1、item2、item3、item4的再次添加而增加
我尝试在MenuFragment的事务之前添加检查if(savedInstanceState==null)
,但没有更改任何内容
我应该怎么做才能使MenuFragment从后堆栈中弹出,而不会再次被这些项目充气
谢谢。请查看。
onActivityCreated()
每次返回片段时都会被调用。请尝试将实现移动到onCreate()
,这样可以解决重复问题。请查看。onActivityCreated())每次返回到片段时都将调用。请尝试将实现移动到onCreate()
,这将解决重复问题。在填充arraylist之前,您可能还可以检查arraylist的大小,然后在ActivityCreated()上清除它
if(m_parts != null && m_parts.size()>0){
//Clear the contents of the arrayList m_parts
m_parts.clear();
}
然后将数据添加到arrayList。也许您还可以检查arrayList的大小,然后在填充arrayList之前在ActivityCreated()上清除它
if(m_parts != null && m_parts.size()>0){
//Clear the contents of the arrayList m_parts
m_parts.clear();
}
然后将数据添加到arrayList。Wow,如果我在onCreate()中填充arrayList,它确实可以工作
。谢谢!+1.嗯,我一直认为onCreate
在片段中被onActivityCreated
替换了…我想我需要再看一次生命周期图。谢谢,今天学到了一些新东西!哇,如果我在onCreate()中填写我的数组列表,它确实有效
。谢谢!+1.嗯,我一直认为onCreate
在片段中被onActivityCreated
所取代…我想我需要再看一次生命周期图。谢谢,今天学到了一些新东西!
if(m_parts != null && m_parts.size()>0){
//Clear the contents of the arrayList m_parts
m_parts.clear();
}