当我向ListView项添加视图时,此项不再正确响应

时间:2014-10-09 10:36:29

标签: android android-listview expandablelistview onitemclicklistener

我想,我的View ListView中会显示一个新的Item,如果我点击这个项目,其中(1)和(2)是点击次数

enter image description here

我可以这样做,但是当我想再次点击这个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条目&#34; TAG&#34;使用值

onItemClick:: BEGIN

onItemClick:: before addTitle

onItemClick:: after addTitle

onItemClick:: BEGIN

但是下一次点击没有显示任何内容,正如所说,Item不再做出反应,但我可以看到我的client_adapter LOG而只是getGroupView方法的条目是单击Item时显示。

我只是想说,如果我附加了ExpandableListView的OnGroupExpand/OnGroupCollapse/OnGroupClick Listeners,它也会表现得像这样。

总结:我有一个ListView,如果我点击第一个项目,这个会展开以显示ExpandableListView,如果我再次点击,这应该会折叠,但这不会#&# 39; t的行为与此类似,因此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>

2 个答案:

答案 0 :(得分:3)

问题的存在是因为您ExpandableListView嵌套了ListView。隐藏ExpandableListView时,只有ListView收到onClick个事件,但当它出现时会消耗所有onClick个事件,因此您的ListView不会对点击了。

您可以关注此主题:ListView OnItemClickListener Not Responding?

或者只是在其中一条评论中选择momo提供的方法 - 仅使用ExpandableListView只有更多深度。

答案 1 :(得分:3)

<强>解决!

我再次正确地写了onCollapsedGroupListeneronExpandedGroupListeneronClickedGroupListener,我在最后一段代码中添加了下一行

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