Ответ 1
К сожалению, определение вида списка через 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 (без кода).
К сожалению, определение вида списка через xml запрещено. Вместо этого требуется беспорядок с адаптерами.
Некоторый прогресс может быть достигнут с использованием строкового массива, например,
<?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>
Вы можете использовать вертикальный LinearLayout, вложенный в ScrollView, чтобы получить то, что вы ищете. Поместите свои элементы списка в LinearLayout и создайте их как элементы списка.
Если вам абсолютно необходимо использовать ListView (например, вы используете ListFragment), вам придется использовать подкласс ListAdapter или сворачивать свой собственный.
На самом деле есть способ! Повторное использование макетов с включает - тег
Просто укажите макет, который вы хотите повторно использовать.
<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