其他分享
首页 > 其他分享> > android – 当我向ListView项添加视图时,此Item不再正确响应

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

作者:互联网

我想,如果我点击这个项目,我的ListView项目中会出现一个新的视图,其中(1)和(2)是点击

我可以这样做,但是当我想再次点击这个项目,即隐藏新的视图时,Itemclick不再以它应该做的方式做出反应.

我在onItemClickListener中执行添加View操作,直到正确位置

我的代码如下

...
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");
        }
});
...

我试图在我的日志中显示行为,并在第一次点击后,我可以看到我的日志条目“TAG”的值

onItemClick :: BEGIN

onItemClick ::在addTitle之前

onItemClick :: addTitle之后

onItemClick :: BEGIN

但是接下来的点击没有显示任何内容,如上所述,该项目不再反应,但我可以看到我的client_adapter LOG,当我点击Item时,只显示getGroupView方法的条目.

我只是想说,如果我附加ExpandableListView的OnGroupExpand / OnGroupCollapse / OnGroupClick监听器,它也会表现得像这样.

总结:我有一个ListView,如果我单击第一个Item,这个展开以显示一个ExpandableListView,如果我再次点击,这应该是折叠的,但这不会像这样,所以ExpandableListView假设控制整个项目.

任何人都可以告诉我,为什么该项目失去了对点击的控制,这是由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>

解决方法:

存在的问题是因为您在ListView中嵌套了ExpandableListView.当隐藏ExpandableListView时,只有ListView接收onClick事件,但是当它出现时它会消耗所有onClick事件,因此ListView不再响应点击.

您可以按照此主题操作:ListView OnItemClickListener Not Responding?

或者只是在评论之一中使用momo提供的方法 – 仅使用具有更多深度级别的ExpandableListView.

标签:android,android-listview,expandablelistview,onitemclicklistener
来源: https://codeday.me/bug/20190528/1172589.html