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

Добавить верхний/нижний колонтитул в списке в xml

Я знаю, как добавить заголовок или нижний колонтитул в JAVA, но мне было интересно, могу ли я добавить его прямо в XML. Я бы не хотел симулировать это, но на самом деле добавить его как нижний колонтитул или заголовок!

4b9b3361

Ответ 1

Нет, я не думаю, что это возможно. На основе Исходный код ListView из атрибутов XML доступны только overScrollHeader/overScrollFooter. Но эти атрибуты принимают только чертежи.

Если вы не хотите использовать трюки с макетами выше/ниже ListView. Вы можете расширить ListView и реализовать собственную поддержку нижнего колонтитула и заголовка в настраиваемом View. Это не так сложно, потому что нижний колонтитул и заголовок уже реализованы. Вам нужно только добавить XML-атрибуты в свой конструктор View.

Ответ 2

Я просто пытался добиться того же самого (чтобы очистить мой код и использовать XML для разметки и исходного кода для логики), но единственным решением, которое я нашел, является определение вида заголовка с XML где-то в вашем макете, а затем отделите его и вставьте в ListView в качестве заголовка.

Например, имея этот XML:

<ListView android:id="@+id/myListView">
</ListView>

<LinearLayout android:id="@+id/myHeader">
    ....
</LinearLayout>

Вы можете сделать это в своем коде:

ListView myListView = (ListView) findViewById(R.id.myListView);
LinearLayout myHeader = (LinearLayout) findViewById(R.id.myHeader);

// Let remove the myHeader view from it current child...
((ViewGroup) myHeader.getParent()).removeView(myHeader);

// ... and put it inside ListView.
myListView.addFooterView(myHeader);

В принципе, здесь мы просто отсоединяем раздутый LinearLayout от его родителя и устанавливаем его как дочерний элемент списка ListView.

Это не идеальное решение, но оно все же проще, чем создание/раздувание заголовка вручную. Кроме того, это использует силу XML-инфляции и повторное использование, если вы используете это внутри некоторого шаблона "держатель".

Надеюсь, это поможет кому-то.

Ответ 3

Вот как это сработало для меня, в моем классе Adapter, который расширяет BaseAdapter. Я нацелен на API 23:

    @Override
    public View getView(int position, View view, ViewGroup parent) {
    if (position == 0) {
        if (view == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(mContext);
            view = layoutInflater.inflate(R.layout.test_results_header, parent, false);
        }
    } else {
        if (view == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(mContext);
            view = layoutInflater.inflate(R.layout.test_result_item, parent, false);
        }
    }

Довольно просто, я раздуваю XML-заголовок для позиции 0 и контент XML для остальных. Если вам известна позиция, в которой вы хотите заголовок или любой другой XML, в вашей логике вам нужно будет проверить позицию и раздуть соответствующий XML для этой позиции.