Когда я добавляю представление в элемент ListView, этот элемент больше не реагирует должным образом

Я хочу, чтобы в моем ListView Item появился новый View, если я нажму на этот элемент вот так, где (1) и (2) — клики

введите здесь описание изображения

и я могу это сделать, но когда я хочу нажать еще раз на этот Item, т.е. скрыть этот новый View, то Itemклик реагирует уже не так, как должен.

Я выполняю add операцию просмотра в моем onItemClickListener правом положении

Мой код следующий

...
list_view.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Log.i("TAG", "onItemClick:: BEGIN");

            switch (position) {
                case 0 : 
                    Log.i("TAG", "onItemClick:: before addTitle");                      
                    showFieldList(view);
                    Log.i("TAG", "onItemClick:: after  addTitle");
                break;              
                ...                 
            }

            Log.i("TAG", "onItemClick:: END");
        }
});
...

Я попытался показать поведение в моем Log, и после первого клика я вижу свою Log запись «TAG» со значениями

onItemClick:: BEGIN

onItemClick:: before addTitle

onItemClick:: after addTitle

onItemClick:: BEGIN

но следующие щелчки ничего не показывают, и, как сказано, этот Item больше не реагирует, но вместо этого я вижу свой client_adapter LOG, и когда я нажимаю Item, отображаются только записи метода getGroupView.

Я просто хотел отметить, что он также ведет себя так, если я присоединяю OnGroupExpand/OnGroupCollapse/OnGroupClick Listeners к ExpandableListView.

Подводя итог: у меня есть ListView, и если я щелкну первый элемент, этот развернется, чтобы показать ExpandableListView, и если я щелкну еще раз, он должен быть свернут, но это не ведет себя так, так что ExpandableListView принимает на себя контроль над весь предмет.

Кто-нибудь может сказать мне, почему item теряет контроль над кликами, а ExpandableListView FieldList выигрывает? Заранее спасибо!

Остальной код

    private View showFieldList(View view) {

        // Retrieving Item Layout. (= view Layout)
        RelativeLayout item_layout = (RelativeLayout) view.findViewById(R.id.relLayoutDrawer);

        // Retrieving "title" Element
        TextView title_tv = (TextView)view.findViewById(R.id.title);

        View row = View.inflate(context, R.layout.field_list, null);

        // Getting Field names
        Resources res = getResources();
        String fields = res.getString(R.string.fields);         

        client = (ExpandableListView)row.findViewById(R.id.field_expandable_list);

        client.setFocusable(false); //<< ADDED TO WORK  

        client_adapter = new ClientAdapter(context, fields);



        // When I comment this Line, `onItemClick` works
        // if not, then client_adapter assummes control

        client.setAdapter(client_adapter); 

        // Setting "Subtitle" under "title" aligning both left borders
        params.addRule(RelativeLayout.ALIGN_LEFT, title_tv.getId());
        params.addRule(RelativeLayout.BELOW, title_tv.getId());     
        item_ayout.addView(row, params);    
    }

Вот мой drawer_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relLayoutDrawer"
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:background="@android:color/black">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="25dp"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/title"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="12dp"
        android:layout_marginRight="12dp"
        android:contentDescription="@string/desc_list_item_icon" />

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_toRightOf="@id/icon"
        android:minHeight="?android:attr/listPreferredItemHeightSmall"
        android:textAppearance="?android:attr/textAppearanceListItemSmall"
        android:textColor="@color/metallic_silver"
        android:gravity="center_vertical"
        android:paddingRight="40dp"/>

    <TextView android:id="@+id/counter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@layout/counter_bg"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginRight="8dp"/>

</RelativeLayout>

person Gödel77    schedule 09.10.2014    source источник
comment
попробуйте вызвать view.requestLayout() после item_ayout.addView(row, params);   -  person Illegal Argument    schedule 09.10.2014
comment
Есть ли какая-то конкретная причина, по которой вы используете ExpandableListView, вложенный в ListView? Если это из-за глубины 3 уровня, вы можете получить то же самое только с расширяемым списком.   -  person momo    schedule 09.10.2014
comment
@momo Да, основная причина - спецификация дизайна. Это должно быть так.   -  person Gödel77    schedule 09.10.2014
comment
@IllegalArgument Я проверял, но безуспешно, все равно спасибо!   -  person Gödel77    schedule 09.10.2014


Ответы (2)


Проблема существует, потому что у вас есть ExpandableListView, вложенный в ваш ListView. Когда ExpandableListView скрыт, только ListView получает onClick событий, но когда он появляется, он потребляет все onClick события, поэтому ваш ListView больше не реагирует на нажатие.

Вы можете следовать этой теме: ListView OnItemClickListener не отвечает?

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

person Piotr Chojnacki    schedule 09.10.2014
comment
Петр, но я не прикреплял слушателей к ExpandableListView. Я разработал ListViews с настраиваемыми элементами (линейные и относительные макеты с ImageViews, кнопками и т. д.), и мне всегда приходилось прикреплять их слушателей, чтобы они реагировали. Спасибо - person Gödel77; 09.10.2014
comment
@ Gödel77 Gödel77 Я думаю, что он все равно потребляет события. Они просто не делегированы никакому конкретному Listener. - person Piotr Chojnacki; 09.10.2014

Решено!

Я снова правильно написал onCollapsedGroupListener, onExpandedGroupListener и onClickedGroupListener и добавил следующую строку к последнему коду

client = (ExpandableListView)row.findViewById(R.id.field_expandable_list);
...
client.setFocusable(false);
person Gödel77    schedule 09.10.2014
comment
Теперь моя проблема состоит в том, чтобы заполнить вложенный ExpandablewListView, я открыл новый поток с Bounty (50). Группа правильно заполнена, но не дети. Каждый раз он должен вызывать getChildView этого вложенного ExpandableListView, It calls getView` основного ListViewstackoverflow .com/questions/26379164/ - person Gödel77; 17.10.2014