android - 当我向 ListView 项目添加 View 时,该项目不再正确 react

标签 android android-listview expandablelistview onitemclicklistener

我想要,如果我像这样单击此项目,则在我的 ListView Item 中出现一个新的 View,其中 (1) 和 ( 2) 是点击次数

enter image description here

我可以做到这一点,但是当我想再次单击此Item时,即隐藏新的View,然后Item单击不再以应有的方式使用react。

我在我的onItemClickListener中执行add 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

但接下来的点击什么也没有显示,如上所述,Item 不再使用react,但我可以看到我的 client_adapter LOG 以及 的条目当我点击 Item 时,会显示 getGroupView 方法。

我也想指出,如果我附加 ExpandableListView 的 OnGroupExpand/OnGroupCollapse/OnGroupClick Listeners,它的行为也会像这样。

总结:我有一个 ListView ,如果我单击第一个项目,则该项目会展开以显示 ExpandableListView ,如果我再次单击,则应折叠该项目但这并不是这样的,因此 ExpandableListView 承担对整个 Item 的控制。

谁能告诉我,为什么 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>

最佳答案

存在此问题的原因是您的 ListView 中嵌套了 ExpandableListView。当 ExpandableListView 隐藏时,只有 ListView 接收 onClick 事件,但当它出现时,它会消耗所有 onClick 事件,因此您的 ListView 不再对点击使用react。

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

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

关于android - 当我向 ListView 项目添加 View 时,该项目不再正确 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26276264/

相关文章:

android - 使整个 ListView 行可点击

android - 将动画添加到 ExpandableListView

android - ExpandableListView 仅在特定 Button 上展开?

Android Appium Scroll UiAutomator ExpandableListView 这种组合会如何运作?

java - 在 toast 上显示整数

android - OpenGL (ES) -- 截锥体和正视体有什么区别?

android - 如何在 ListView 中放置 ProgressBar?

使用listview时出现android arrayindexoutofbounds异常

android - 我的应用程序的 WebView 中的谷歌搜索链接打开一个空白页面..!

Android Firebase NoClassDefFoundError : com. google.firebase.FirebaseOptions 更新到新的 firebase 后