У меня есть приложение андроида, которое показывает представление сетки, которое показывает:
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
Какая-либо идея?
Должен быть вид сетки? Будет ли работать 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 - это идентификатор представления, используемого для каждой строки списка, курсор, содержащий данные, массив строк, где каждый элемент - это имя столбца от курсора (в порядке их получения). и соответствующий массив идентификаторов представления для представления, используемого для каждого элемента в строке списка.
JRL прав, вы должны написать свой собственный адаптер, который позволит вам контролировать, что будет отображаться в каждом строка. Вы можете найти это полезным. Более сложный пример можно найти здесь http://developerlife.com/tutorials/?p=327.
Если вы не хотите / не должны использовать список, TableLayout также может отображать ваши данные. Но это будет ручной подход, так как вам нужно будет заполнить каждую ячейку.
Наилучший успех.
Если вы не можете найти существующий адаптер с этими свойствами, вы можете создать свой собственный адаптер и сопоставить его с вашим представлением.
В руководстве Привет, GridView показано, как это сделать.