【问题标题】:How to make 2 list views in a tab widget如何在选项卡小部件中创建 2 个列表视图
【发布时间】:2011-12-29 22:09:34
【问题描述】:

我通过 android.com 的教程制作了一个列表视图,它在一个选项卡小部件中,但问题是它遍布选项卡的区域,我想在一个选项卡中创建 2 个列表,一个在另一个旁边。 .. 我怎样才能做到这一点? 这是教程的链接:

http://developer.android.com/resources/tutorials/views/hello-listview.html

编辑: 好的,我在 onCreate 方法中有 2 个静态最终字符串数组,名为 CONTACTS 和 FAVORITES,我将 MH 的布局复制到一个名为 list_who 的 xml 文件中并更改了lv_cons 和 lv_vav 的 ID,以及另一个名为 tv (TextView) 的布局,它只有一个文本视图,因为这是适配器所需要的

super.onCreate(savedInstanceState);
ListView lv_cons = (ListView) findViewById(R.id.lv_cons);
ListView lv_fav = (ListView) findViewById(R.id.lv_fav);
lv_cons.setAdapter(new ArrayAdapter<String>(this, R.layout.tv, CONTACTS));
lv_fav.setAdapter(new ArrayAdapter<String>(this, R.layout.tv, FAVORITES));
setContentView(findViewById(R.layout.list_who));

【问题讨论】:

  • 您想要两个选项卡,每个选项卡中都有一个列表,还是一个选项卡中有两个列表?

标签: java android eclipse listview


【解决方案1】:

如果您希望两个并排显示两个列表,则需要更改一些内容。

首先是选项卡内容的(最小)布局:

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

    <ListView
        android:id="@+id/left_listview"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />

    <ListView
        android:id="@+id/right_listview"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1" />

</LinearLayout>

如果您遵循您链接的 Hello ListView 示例代码,您必须将您的 ListActivity 更改回 Activity。前者基本上提供了许多使用单个列表的便捷方法,但您可以对常规活动执行完全相同的操作,您需要使用多个列表。

您可以像任何其他视图一样使用它们的 id 来扩充您的 ListView(没有更多的 getListView() 便捷方法,因为我们不再扩展 ListActivity)`:

ListView leftList = (ListView) findViewById(R.id.left_listview);
ListView rightList = (ListView) findViewById(R.id.right_listview);

从那时起,您可以添加所有内容来填充/操作列表的内容。

//编辑:如果您坚持以编程方式创建布局,只需将上面的 xml 代码转换为它的 Java 等效代码:

// Create ViewGroup as container for both lists
LayoutParams rootParams = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
LinearLayout root = new LinearLayout(this);
root.setLayoutParams(rootParams);

// Create LayoutParams for the lists - both identical in this example
LinearLayout.LayoutParams listParams = new LinearLayout.LayoutParams(0, LayoutParams.FILL_PARENT);
listParams.weight = 1;
ListView leftList = new ListView(this);
ListView rightList = new ListView(this);
leftList.setLayoutParams(listParams);
rightList.setLayoutParams(listParams);

// Add lists to container
root.addView(leftList);
root.addView(rightList);

// Set container as content view
setContentView(contentView);

【讨论】:

  • 非常感谢,但是当我对布局执行 setContentView 或为列表设置适配器时,它会崩溃。
  • 那么显然是时候开始将一些代码添加到您的问题中了。上面应该可以正常工作,所以你可能混淆了其他一些东西。
  • 您必须先致电setContentView(...),然后再尝试增加任何视图。换句话说,将调用移到super.onCreate(...) 之后。想一想:如果你还没有告诉它应该使用什么布局,Activity 怎么能尝试膨胀任何视图?
  • 好的,我把它移到了顶部,但仍然没有运气,并且通过调试器它在 seContentVie 行上崩溃了,如果我删除它,应用程序在 setAdapter 行上崩溃。
  • 哦,我忘了,我不想使用 setContentView,我想从活动中创建列表,因为这个活动是 tabHost 中的一个选项卡,也是由 android.com 的教程制作的:@ 987654321@
【解决方案2】:

如果您希望在单独的选项卡中处理两个单独的 ListViews(即每个选项卡中的 ListView),请按照本教程操作:Android TabActivity with two list views

您只需要制作一个复合布局并以编程方式从 xml 中提取您的tabHost,然后动态扩展选项卡。如果您希望两个列表通过Intent 相互通信,我进一步建议使用此方法。两个选项卡都将托管在一个活动中。如果我误解了您的问题,并且您想在一项活动中显示两个单独的相邻列表。请忽略我的回答。

我认为这就是您要寻找的。祝你好运。

【讨论】:

  • 谢谢,但您确实误会了,我确实希望在一个标签中包含两个列表,我的问题会更清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-02
  • 2019-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多