android: пользовательский (составной) элемент управления в ListView

#android #listview

#Android #listview

Вопрос:

У меня серьезная проблема с ListView: я создал составной элемент управления

 public class TopicControl extends LinearLayout
....

<merge xmlns:android="http://schemas.android.com/apk/res/android">
    <LinearLayout
        android:id="@ id/llTopicHeader"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
    >
        <Button 
            android:id="@ id/btnTopicTitle"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:tag="btnTopicTitle"
        ></Button>
        <LinearLayout
            android:id="@ id/llTopicBar"
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:visibility="invisible"
            android:tag="llTopicBar"
        >
            <Button
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:background="@drawable/bar_calendar"
            ></Button>
            <Button
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:background="@drawable/bar_person"
            ></Button>
        </LinearLayout>
    </LinearLayout>
    <TextView 
        android:id="@ id/tvTopicText"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"
    ></TextView>
</merge>
  

В этом элементе управления я реализовал скрытие / отображение llTopicBar при нажатии btnTopicTitle.

Проблема в том, что когда я добавляю этот компонент в ListView, после нажатия btnTopicTitle llTopicBar становится видимым не только для выбранного элемента, но и для каждого второго элемента LstViewItem.

после добавления «родительской» проверки llTopicBar становится видимым для каждого 4-го элемента в ListView.

 Override
public void onClick(View v)
{
    if (v.getParent().getParent() == getThis())
    llTopicBar.setVisibility(llTopicBar.getVisibility() == View.VISIBLE ? View.INVISIBLE : View.VISIBLE);
}
  

Не могли бы вы, пожалуйста, помочь мне с этой проблемой?

Ответ №1:

Проблема заключалась в повторном использовании представлений для ListView во время прокрутки.