仅在onitemclicklistener之后第二次触发ListView项内的子视图的Onclicklistener

时间:2017-01-16 10:33:38

标签: android listview onclicklistener onitemclicklistener

情况就是这样:我有一些包含一些项目的Listview。在每个项目中,有两个可单击的视图,仅在用户单击其父项后显示。

它的工作原理如下:

productList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(final AdapterView<?> parent, final View view, final int position, long id) {

                TextView txtAdd = (TextView) view.findViewById(R.id.txt_add_units);
                txtAdd.setVisibility(View.VISIBLE);
                txtAdd.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ...
                    }
                });

                TextView txtRemove = (TextView) view.findViewById(R.id.txt_remove_units);
                txtRemove.setVisibility(View.VISIBLE);
                txtRemove.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        ...
                    }
                });

                basketProductsListAdapter.notifyDataSetChanged();

            }

        });

第一次单击listview项时,会显示其txtAdd和txtRemove子视图,然后如果用户单击它们,则会执行其onclickListener中的代码。

问题仅出现在第一个listview项目中。第一次单击txtAdd并显示txtRemove,但是第一次用户点击子视图,他们的父级的ItemClickListener再次被触发,然后子视图(txtAdd和txtRemove)没有接收到clickListener。以下时间它们完美地工作。奇怪的是它只是第一次出现在listView的第一个项目上。

有什么想法吗?提前致谢!

1 个答案:

答案 0 :(得分:0)

将此行添加到listview xml android:descendantFocusability="blocksDescendants"

Thing是我们的子视图可能是可聚焦的,因此第一次单击将用于焦点,然后itemClick将起作用。避免可聚焦在xml中添加该行

如果它不起作用,请尝试添加

android:focusable="false"
android:focusableInTouchMode="false"

到列表视图的子视图