Как отобразить два столбца ListView in 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);

К моменту работает, но я хотел бы показать foreach строку сетки, 2 столбца со значениями 2 размерных массивов (что-то как GridView в ASP.NET - как источник данных-).

Я хотел бы показать:

1 | Человек 1

2 | Человек 2

3 | Человек 3

4 | Человек 4

Какая-либо идея?

16
задан Janusz 12 March 2010 в 15:28
поделиться

3 ответа

Должен быть вид сетки? Будет ли работать ListView?

Я написал ListView и ListActivity, которые отображают по два элемента в каждой строке. Я начал с предоставленного SDK макета simple_list_item_2.xml, который перечисляет два элемента в строке, но помещает один поверх другого (две строки), а во второй строке используется меньший шрифт. Я хотел, чтобы оба предмета были в одной строке, один справа, а другой слева.

Сначала я скопировал файл simple_list_item_2.xml в каталог res / layout моего проекта под новым именем и изменил свойство android: mode = "twoLine" на "oneLine", сохранив имя элемента представления как "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>

Обратите внимание, что я использовал "левый" и "правый" значения 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.

Параметры ctor SimpleCursorAdapter - это идентификатор представления, используемого для каждой строки списка, курсор, содержащий данные, массив строк, где каждый элемент - это имя столбца от курсора (в порядке их получения). и соответствующий массив идентификаторов представления для представления, используемого для каждого элемента в строке списка.

31
ответ дан 30 November 2019 в 16:36
поделиться

JRL прав, вы должны написать свой собственный адаптер, который позволит вам контролировать, что будет отображаться в каждом строка. Вы можете найти это полезным. Более сложный пример можно найти здесь http://developerlife.com/tutorials/?p=327.

Если вы не хотите / не должны использовать список, TableLayout также может отображать ваши данные. Но это будет ручной подход, так как вам нужно будет заполнить каждую ячейку.

Наилучший успех.

3
ответ дан 30 November 2019 в 16:36
поделиться

Если вы не можете найти существующий адаптер с этими свойствами, вы можете создать свой собственный адаптер и сопоставить его с вашим представлением.

В руководстве Привет, GridView показано, как это сделать.

4
ответ дан 30 November 2019 в 16:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: