Как отобразить два столбца ListView в Android?
У меня есть приложение для Android, которое показывает вид сетки, который показывает:
1
2
- org.apache.http.entity.FileEntity устарел в Android 6 (Marshmallow)
- Можно ли использовать VectorDrawable в кнопках и TextViews с помощью android: DrawableRight?
- Отладка Logcat Eclipse
- Android HttpPost: как получить результат
- Обнаружение Polygon Touch Google Map API V2
3
4
GridView gridview=(GridView)findViewById(R.id.GridView_test); DataBaseHelper dbhelper=new DataBaseHelper(this); ArrayList test=new ArrayList(5); backlinksadapter.add("1"); backlinksadapter.add("2"); backlinksadapter.add("3"); backlinksadapter.add("4"); ArrayAdapter mAdapter=new ArrayAdapter(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
Есть идеи?
- eclipse с Android sdk, ERROR: пространство кучи Java
- Не удалось выполнить dex: превышение верхнего предела GC в Eclipse
- Как отформатировать продолжительность в java? (например, формат H: MM: SS)
- В чем разница между a + = b и a = + b, а также ++ и ++ a?
- Проверка программного режима энергосбережения
- NoClassDefFoundError: android.support.v7.internal.view.menu.MenuBuilder
- Java: Как установить точность для двойного значения?
- Нужен ли главный метод в программе Java?
Должна ли быть grid? Будет ли работать 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-файл макета:
Обратите внимание, что я использовал «левый» и «правый» андроид: значения силы тяжести, чтобы левая сторона осталась в силе, а правый элемент правой стороны. Вам понадобятся разные значения силы тяжести для вашего макета, плюс вам понадобятся свойства для управления размером левого элемента, который мне не нужен.
Метод в моем classе 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 – три элемента данных в моем classе ListAdaptor, и они инициализируются в другом месте. В моем фактическом коде mAuthor фактически построен в этом методе из списка имен авторов. Имена авторов объединяются в одну строку, используя «\ n» в качестве разделителей между именами. Это приводит к тому, что имена нескольких авторов отображаются на разных строках в том же TextView.
Параметры ctor SimpleCursorAdapter – это идентификатор представления, который будет использоваться для каждой строки списка, курсора, содержащего данные, массива строк, где каждый элемент является именем столбца из курсора (в порядке их получения) и соответствующим массив идентификаторов вида для представления, который будет использоваться для каждого элемента в строке списка.
Если вы не можете найти существующий адаптер, обладающий этими свойствами, вы можете создать свой собственный пользовательский адаптер и сопоставить его с вашим представлением.
Учебник Hello, GridView показывает, как это сделать.
JRL прав, вы должны написать собственный пользовательский адаптер, который позволит вам контролировать, что будет отображаться в каждой строке. Вы можете найти это полезным. Более подробный пример можно найти здесь http://developerlife.com/tutorials/?p=327 .
Если вы не хотите / должны использовать список, TableLayout также может отображать ваши данные. Но это будет ручной подход, так как вам придется заполнять каждую ячейку.
Лучший успех.
Почему бы не создать class, чья toString()
возвращает str(id) + " | " + personName
и использовать его как class шаблона вместо объекта String
?
Вы можете просто добавить это в свой XML-андроид: numColumns = “2”