如何以编程方式将多个列表片段添加到单个活动中?

时间:2013-09-18 18:02:54

标签: android android-listview android-fragments

道歉,因为我是Android新手。我正在尝试以编程方式将多个列表片段添加到单个活动中,但是当我这样做时,只显示一个。如何在一个操作中显示多个列表?

最终目标是从API读取一组数据并将其分类到我的应用程序中的多个列表中。我希望数据是水平滚动列表片段,但由于这是一个额外的复杂性,我开始使用简单的ListFragments。我的代码如下所示:

activity_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/fragmentContainer"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  />

ItemActivity:

public class ItemActivity extends FragmentActivity
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_fragment);
        FragmentManager manager = getSupportFragmentManager();

        ItemListFragment fragment1 = new ItemListFragment();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.fragmentContainer, fragment1);        
        ItemListFragment fragment2 = new ItemListFragment();
        transaction.add(R.id.fragmentContainer, fragment2);
        transaction.commit();

    }
}

ItemListFragment:

public class ItemListFragment extends ListFragment {    
    List<String> items = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        items.add("One");
        items.add("Two");
        items.add("Three");
        ArrayAdapter<String> adapter = 
            new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, items);
        setListAdapter(adapter);
    }
}

2 个答案:

答案 0 :(得分:1)

如果你想在一个Activity中有多个列表,这就是我通常做的事情:

  1. 因为每个ListView都使用独立的滚动视图,所以我通常会为每个ListView分割屏幕。示例:使用2 ListView我将屏幕高度分成50/50,因此每ListView个屏幕占50%。
  2. 如果我必须动态添加ListView到屏幕,我会使用cwac merge adapter合并适配器并将其显示在一个ListView
  3. 您可以使用ViewPager来显示ListFragment。这将实现您的目标,即在单个活动中拥有多个列表视图。

答案 1 :(得分:0)

为什么你不这样做?

FragmentManager fragmentManager = getFragmentManager ();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction ();
// work here to change Activity fragments (add, remove, etc.).  Example here of adding.
fragmentTransaction.add (R.id.myFrame, myFrag);
fragmentTransaction.commit ()

我找到了这段代码,因此只显示一个代码,在代码中提交每个事务。

    FragmentManager manager = getSupportFragmentManager();

    ItemListFragment fragment1 = new ItemListFragment();
    FragmentTransaction transaction = manager.beginTransaction();
    transaction.add(R.id.fragmentContainer, fragment1).commit();
    transaction = manager.beginTransaction(); // might be unnescessary
    ItemListFragment fragment2 = new ItemListFragment();
    transaction.add(R.id.fragmentContainer, fragment2).commit();

如果这会引发某种错误,您可能需要启动另一个事务来添加第二个片段。