如何在Android的单个活动中使用多个列表视图?

16

我有9个列表视图应该放在同一个活动中。所有的列表可能会同时显示在屏幕上(同时显示是不错的)。


你可以尝试使用 TabWidget,它非常适合同时显示多个列表视图。 - Sephy
2
或者使用ViewFlipper/ Switcher,如果你想让它更有吸引力。 - stealthcopter
3个回答

24
以下是关于同一个Activity中多个ListView的不错解决方案。首先是重要的布局文件(来自ANDROID : split the screen in 2 equals parts with 2 listviews,做得很好!)。请注意,ListViews嵌入了它们各自的LinearLayout中,并且每个LinearLayout的权重相等。
<LinearLayout android:layout_weight="1" 
                    android:layout_height="fill_parent" 
                    android:layout_width="fill_parent">

                <ListView   android:id="@+id/list1" 
                            android:layout_height="fill_parent" 
                            android:layout_width="fill_parent">

                </ListView>
    </LinearLayout>

<LinearLayout android:layout_weight="1" 
                android:layout_height="fill_parent" 
                android:layout_width="fill_parent">

            <ListView   android:id="@+id/list2" 
                        android:layout_height="fill_parent" 
                        android:layout_width="fill_parent">

            </ListView>
</LinearLayout>

// Start java Code (you can figure out the imports)
public class AnActivity extends Activity {
private ListView lv1 = null;
private ListView lv2 = null;
private String s1[] = {"a", "b", "c", "d", "e", "f"};
private String s2[] = {"r", "s", "t", "u", "v", "w", "x"};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

        // Get UI references.
        //
    lv1 = (ListView) findViewById (R.id.list1);
    lv2 = (ListView) findViewById (R.id.list2);

    lv1.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, s1));
    lv2.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, s2));

} // onCreate()

} // class

如果有任何错别字,请见谅。我是在窗口中直接编辑而不是在Eclipse中进行编辑。祝你好运!


1
在每个 ListView 中,我该如何像在 ListActivity 中那样获取 onListItemClick? - Totic
1
这是一个好问题,因为它经常出现,而且我从未看到过很好的解释。在 Activity 类中,如果你想监听点击事件(比如 onListItemClick),请确保该类实现了 OnClickListener 接口。就这样,你就可以 @Override onListItemClick 方法了。哦对了,如果你的目标版本低于 2.1,你必须省略 @Override 部分。祝你好运! - SMBiggs
1
@Totic:我建议将这个问题单独提出来。这样你可以得到完整的答案,其他人也能从中受益。 - SMBiggs
@Totic:你可以在XML布局文件中设置android:onClick。 - Arthulia

5

@Scott非常感谢,我觉得这篇文章很有用。在我的情况下,我希望这两个listview能够位于同一水平布局中(横向)。

<LinearLayout android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
    <LinearLayout
        android:id="@+id/linearLayout1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1" >

            <ListView
                android:id="@+id/listView1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:visibility="visible">
            </ListView>
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1" >

            <ListView
                android:id="@+id/listView2"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent" android:visibility="visible">
            </ListView>
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

看起来编辑器截掉了你代码的顶部。我假设你有:<LinearLayout android:orientation="horizontal"...对你有效吗?看起来应该可以。不客气! - SMBiggs
1
非常正确!!!它把它剪掉了。它对我有用,我已经转向其他挑战。谢谢。 - Mighty

0

5
不仅要添加链接,还需要在此处提供一些细节,以便人们可以利用您的答案而不必访问某个网站,并将其作为参考。 - Stephen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接