java - 如何在 Android 中显示两列 ListView?

标签 java android android-widget

我有一个显示 GridView 的 android 应用程序:

1

2

3

4

GridView gridview=(GridView)findViewById(R.id.GridView_test);
DataBaseHelper dbhelper=new DataBaseHelper(this);
ArrayList<String> test=new ArrayList<String>(5);
backlinksadapter.add("1");
backlinksadapter.add("2");
backlinksadapter.add("3");
backlinksadapter.add("4");
ArrayAdapter mAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, test);
gridview.setAdapter(mAdapter);

目前正在工作,但我想显示网格的每行,2 列具有二维数组的值(类似于 ASP.Net 中的 GridView - 作为数据源 -)。

我想展示:

1 |人 1

2 |人 2

3 |第三个人

4 |第 4 人

有什么想法吗?

最佳答案

它必须是 GridView 吗? ListView 可以工作吗?

我编写了一个 ListView 和 ListActivity,在每行中显示两个项目。我从 SDK 提供的 simple_list_item_2.xml 布局开始,该布局每行列出两个项目,但将一个项目放在另一个项目(两行)之上,第二行使用较小的字体。我想要的是两个项目在同一行,一个在右边,一个在左边。

首先,我将 simple_list_item_2.xml 复制到我的项目的 res/layout 目录中并使用新名称并将属性 android:mode="twoLine"更改为 "oneLine",同时仍将 View 元素名称保留为 "TwoLineListItem"。然后,我将两个内部元素替换为我想要的。

在初始化列表的代码中,我创建了一个 MatrixCursor 并用所需的数据填充它。为了支持两个项目,MatrixCursor 中的每一行需要三列,一列是主键“_id”,另外两列是我想要显示的项目。然后我就可以使用 SimpleCursorAdapter 来填充和控制 ListView。

我的布局 XML 文件:

 <?xml version="1.0" encoding="utf-8"?>
  <TwoLineListItem
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="2dip"
     android:paddingBottom="2dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:mode="oneLine"
  >
<TextView
    android:id="@android:id/text1"
    android:gravity="left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="6dip"
    android:layout_marginTop="6dip"
    android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
    android:id="@android:id/text2"
    android:gravity="right"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="6dip"
    android:layout_marginTop="6dip"
    android:layout_marginRight="6dip"
    android:layout_toRightOf="@android:id/text1"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/MainFontColor"
/>
</TwoLineListItem>

请注意,我使用“left”和“right” android:gravity 值使左侧项目左对齐,右侧项目右对齐。您的布局需要不同的重力值,而且您需要属性来控制我不需要的左侧项目的大小。

我的 ListActivity 类中初始化 ListView 的方法:

private void initListView()
{
    final String   AuthorName    = "Author: ";
    final String   CopyrightName = "CopyRight: ";
    final String   PriceName     = "Price: ";

    final String[] matrix  = { "_id", "name", "value" };
    final String[] columns = { "name", "value" };
    final int[]    layouts = { android.R.id.text1, android.R.id.text2 };

    MatrixCursor  cursor = new MatrixCursor(matrix);

    DecimalFormat formatter = new DecimalFormat("##,##0.00");

    cursor.addRow(new Object[] { key++, AuthorName, mAuthor });
    cursor.addRow(new Object[] { key++, CopyrightName, mCopyright });
    cursor.addRow(new Object[] { key++, PriceName,
            "$" + formatter.format(mPrice) });

    SimpleCursorAdapter data =
        new SimpleCursorAdapter(this,
                R.layout.viewlist_two_items,
                cursor,
                columns,
                layouts);

    setListAdapter( data );

}   // end of initListView()

MatrixCursor 构造函数的参数是一个字符串数组,用于定义光标中列的顺序和名称。重要提示:确保添加“_id”列,没有它,MatrixColumn 将抛出异常并无法工作!

三个变量 mAuthor、mCopyright 和 mPrice 是我的 ListAdaptor 类中的三个数据成员,它们在别处初始化。在我的实际代码中,mAuthor 实际上是根据作者姓名列表在此方法中构建的。作者姓名使用“\n”作为姓名之间的分隔符连接成一个字符串。这会导致多个作者姓名出现在同一 TextView 的不同行上。

SimpleCursorAdapter ctor 参数是要用于每个 List 行的 View 的 ID、包含数据的游标、字符串数组,其中每个元素是游标中列的名称(按顺序获取它们)以及用于列表行中每个项目的 View 的相应 View ID 数组。

关于java - 如何在 Android 中显示两列 ListView?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2432951/

相关文章:

android - 每个小部件实例的不同设置

Java 列出目录中的文件

java - 哪个版本的 Java 支持 -command 选项?

android - Android Q 上 "android:useEmbeddedDex"的用途

android - Android-Code After Looper

java - 如何让六个按钮根据屏幕尺寸调整大小?

android - 如何在android列表中显示ArrayAdapter的文本和图标?

android - 如何在 Android 应用程序中维护 session 超时处理

java - 如何在 postgres 和 Hibernate/Spring 中使用 LIMIT 子句

java - 需要一个高效的Map或Set,在添加和删除时不会产生任何垃圾