Переменная ListView Элемент макета - PullRequest
0 голосов
/ 14 октября 2019

У меня есть файл макета элемента ListView с 3 TextViews в LinearLayout.

ListView Item layout

<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="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/Count"
        android:layout_width="54dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="4dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="4dp"
        android:layout_weight="0"
        android:layout_gravity="center_vertical"
        android:background="@drawable/seen_background"
        android:gravity="end"
        android:textColor="@color/black"
        tools:text="5,000" />

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="4"
        android:orientation="vertical">

        <TextView
            android:id="@+id/title"
            android:textSize="14sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="@color/black"
            tools:text="War and Peace" />

        <TextView
            android:id="@+id/subtitle"
            android:textSize="8sp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:maxLines="1"
            android:textColor="@color/gray"
            tools:text="Some subtitle" />

    </androidx.appcompat.widget.LinearLayoutCompat>

</LinearLayout>

В зависимости от предпочтений пользователя, я хочу либопоказать подзаголовок TextView или нет. Мой вопрос, каков наилучший способ сделать это? Кажется, у меня есть два варианта: 1. Создать два разных макета элемента ListView - один с субтитрами и один без. 2. Используйте тот же макет элемента ListView и установите subtitle.setVisibility (false).

Что предпочтительнее? Если бы я использовал вариант № 2, который мне кажется более предпочтительным, я не уверен, где и когда установить Visibility в этом TextView. ListView использует SimpleCursorAdapter.

И если я установил Visibility (View.GONE), я полагаю, что это заставляет TextView заголовка занимать всю правую сторону, чего я и хочу.

Ответы [ 3 ]

3 голосов
/ 14 октября 2019

Что предпочтительнее?

Что ж, лучшее решение - заменить устаревшее ListView на RecyclerView.

Независимо от этого ... длянебольшое изменение для каждой строки, как это, изменение макета строки (например, переключение видимости представления) вполне разумно. Если бы произошли более существенные изменения, то было бы предпочтительнее иметь несколько разметок строк, но в этом случае это кажется излишним.

Я не уверен, где и когда установить Visibility в этом TextView. ListView использует SimpleCursorAdapter.

Прошло много времени с тех пор, как я использовал SimpleCursorAdapter (я упоминал, что ListView устарел?). В основном у вас есть выбор:

  • Переопределение bindView(), переключение видимости в вашем переопределенном методе, затем цепочка к реализации суперкласса bindView() для всей его обычной логики, или

  • Использование ViewBinder и setViewBinder()

В любом случае убедитесь, что для каждый ряд вы всегда установить видимость, какой она должна быть (например, видимой или пропавшей). Строки перерабатываются с ListView, поэтому начальное состояние этого представления неопределенное.

1 голос
/ 14 октября 2019

Если вы используете Arraylist объектов с Listview, то добавьте к этому объекту дополнительную переменную boolean

   public Boolean isvisible;

установите для default значение true и сделайте это в своем адаптере

if(!isvisible){
textview2.setvisibility=View.INVISIBLE;//orView.GONE
else{
textview2.setvisibiliti=View.VISIBLE;
0 голосов
/ 14 октября 2019

Установите видимость GONE, и она должна быть такой, как вы сказали

...