【问题标题】:ListFragment is inflated twiceListFragment 膨胀了两次
【发布时间】: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


    【解决方案1】:

    看看Fragment lifecycle。每次返回Fragment时都会调用onActivityCreated()。相反,尝试将您的实现移至onCreate(),这应该可以解决您的重复问题。

    【讨论】:

    • 哇,如果我在 onCreate() 中填写我的 ArrayList,它确实有效。谢谢!
    • +1。呵呵,我一直以为onCreateonActivityCreated在一个片段中替换了……我想我需要再看一下那个生命周期图。谢谢,今天学到了新东西!
    【解决方案2】:

    也许您还可以检查 arraylist 的大小,然后在填充 arrayList 之前在 onActivityCreated() 上清除它。

         if(m_parts != null && m_parts.size()>0){
    
            //Clear the contents of the arrayList m_parts
    
              m_parts.clear();
           }
    

    然后将数据添加到arrayList中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多