Подтвердить что ты не робот

Определить вид списка со статическими элементами на android в xml?

Я хочу создать фрагмент, который будет отображать статическое меню в виде набора строк в списке.

Мне нравится метод iOS со статическими ячейками в виде таблицы. Как я могу достичь этого в android (поэтому для определения элементов, просто xml не нужен код)

Есть ли какой-либо регулярный способ определения статических элементов в xml следующим образом

(псевдокод)

list_view.xml

<List view>
  - use element my_row with onclick=row1_clicked and title="row 1"
  - use element my_row with onclick=row2_clicked and title="row 2"
  - use element my_row with onclick=row3_clicked and title="row 3"
  - use element my_row with onclick=row4_clicked and title="row 4"
</List view>

my_row.xml

<My Row>
  - text field (title should go here)
  - on click (on click should go here)
</My Row>

Итак, в основном я хочу "включить" строку в список и сделать это на уровне xml (без кода).

4b9b3361

Ответ 1

К сожалению, определение вида списка через xml запрещено. Вместо этого требуется беспорядок с адаптерами.

Ответ 2

Некоторый прогресс может быть достигнут с использованием строкового массива, например,

<?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"
  android:orientation="vertical" >
  <ListView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/sports_array"/>
</LinearLayout>

пара с

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string-array name="sports_array">
    <item>Shuttle Badminton</item>
    <item>Tennis</item>
    <item>FootBall</item>
  </string-array>
</resources>

источник: http://theopentutorials.com/tutorials/android/listview/android-creating-and-populating-listview-items-in-xml/

Ответ 3

Вы можете использовать вертикальный LinearLayout, вложенный в ScrollView, чтобы получить то, что вы ищете. Поместите свои элементы списка в LinearLayout и создайте их как элементы списка.

Если вам абсолютно необходимо использовать ListView (например, вы используете ListFragment), вам придется использовать подкласс ListAdapter или сворачивать свой собственный.

Ответ 4

На самом деле есть способ! Повторное использование макетов с включает - тег

Просто укажите макет, который вы хотите повторно использовать.

<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="horizontal"/>
 <ImageView
        android:id="@+id/profileImage"
        android:layout_width="128dp"
        android:layout_height="128dp"
        android:src="@drawable/lena" />
 <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/profileOnline"/>
 </LinearLayout>

Затем включите его в свою ViewGroup столько раз, сколько требуется

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal">

    <include layout="@layout/titlebar"/>

    <TextView android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:text="@string/hello"
              android:padding="10dp" />

    ...

</LinearLayout>

Вы также можете переопределить все параметры макета (любые атрибуты android: layout_ *) включенного корневого представления макета, указав их в теге. Например:

<include android:id="@+id/news_title"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         layout="@layout/title"/>

Дополнительная информация на http://developer.android.com/training/improving-layouts/reusing-layouts.html