Добавить статический заголовок в listFragment в onCreateView - PullRequest
2 голосов
/ 28 июня 2011

Как я могу добавить простой статический заголовок в мой просмотр списка внутри фрагмента списка?Я хочу создать заголовок из xml def и добавить его через инфляцию.

Мой onCreateView:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
    View detailList = inflater.inflate(R.layout.detail_fragment, container, false);
    View detailListHeader = inflater.inflate(R.layout.daily_sales_header, null, false);
    container.addView(detailListHeader, 0);
    return detailList;
}

Это создает заголовок, но он не выше представления списка, а просмотра спискапоявляется под заголовком, то есть заголовок перекрывает представление списка.

Есть ли какие-либо подсказки о правильной реализации?

Ответы [ 2 ]

8 голосов
/ 21 июня 2012

Ввод описания hackbod в код для вас, так как его ответ создал больше вопросов, прежде чем ответы пришли. Иногда я просто хочу рыбу. Мне не всегда нужно знать, как устроена сеть ...

Для начала создайте макет, который выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/myListViewWithHeader"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="6dp"
        android:textStyle="bold"
        android:textSize="20sp" />

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:drawSelectorOnTop="false" />

    <TextView
        android:id="@android:id/empty"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

Затем в вашем методе onCreateView вы делаете это:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.myListViewWithHeader, null);
    return view;
}

Заголовок теперь может быть заполнен следующим образом:

// get the header view
TextView headerView = (TextView) getView().findViewById(R.id.header);
headerView.setText("Header text goes here");

Обратите внимание, что мой заголовок является TextView, но при желании его можно заменить другим представлением. В этом случае вам нужно будет выполнить getView (). FindViewById (R.id.xxxxx) для каждого представления внутри заголовка, с которым вы хотите работать

3 голосов
/ 28 июня 2011

Вы НИКОГДА не должны добавлять представления непосредственно к контейнеру в onCreateView (). Пожалуйста, прочтите документацию: http://developer.android.com/reference/android/app/Fragment.html#onCreateView(android.view.LayoutInflater, android.view.ViewGroup, android.os.Bundle)

Также см. Различные примеры кода в документации фрагмента, а также демонстрации API: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html

Здесь нет ничего особенного в использовании фрагмента. Просто создайте иерархию представлений, содержащую ListView, как обычно в Activity или где-либо еще. Вам всегда нужно возвращать один View из onCreateView; это корень вашей иерархии.

Например, вы можете создать ListView, а затем использовать его для добавления к нему заголовка: http://developer.android.com/reference/android/widget/ListView.html#addHeaderView(android.view.View)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...