Android ListView ClickEvent 不起作用

Posted

技术标签:

【中文标题】Android ListView ClickEvent 不起作用【英文标题】:Android ListView ClickEvent not working 【发布时间】:2015-12-19 09:09:11 【问题描述】:

我在 android 中使用自定义 ListView,一切正常,将数据提取到列表中。早些时候,点击事件可以正常工作,但是当我在 litst_view_item.xml 文件中应用自定义背景的自定义 TextViewLinerLayout 时,它的点击事件现在不起作用,请帮助我。 如何消除此错误?

我尝试了所有代码示例,例如:

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

在 list_view_item.xml 中的每个布局项中(即使在线性布局中)

android:descendantFocusability="blocksDescendants"

在 listview_activity.xml 文件中

在 listview 属性及其父 LinearLayout.xml 中

如果有人知道这个问题,请帮助我

【问题讨论】:

【参考方案1】:

从 listview_activity.xml 中删除 android:descendantFocusability="blocksDescendants" 并将其添加到 list_view_item.xml 的***布局中。

【讨论】:

如果可能的话,你可以发布 list_view_item.xml 吗? gist.github.com/sahityakumarsuman/e9f129a878395568881f 。这是我放list_item_code代码的github 这是 list_item.xml 代码 = gist.github.com/sahityakumarsuman/e9f129a878395568881f 这是 list_view_activity.xml 代码 = gist.github.com/sahityakumarsuman/e639f3e34ce47620059c ,适配器代码是 = gist.github.com/sahityakumarsuman/4e4cbd190a5076be3909 并且活动类是 = @ 987654324@ 我不明白你为什么在列表项布局中使用滚动视图。还应将 android:focusable="false" android:focusableInTouchMode="false" 添加到需要在列表项中单击的视图(例如:列表项中的按钮)。您已为所有视图添加了属性。 所以根据你我应该怎么做,并使用滚动视图,因为我在 xml 和文件中使用了很多视图,我在下一个活动中从这些视图中获取文本,但不应该对那些人都可见这就是我这样做的原因,我也可以在线性布局中使用这个属性【参考方案2】:

尝试使用自定义 listView 适配器,并将 onClick 侦听器添加到视图布局中,如下所示:

public listviewAdapter(Activity activity, ArrayList<String> list) 

            this.activity = activity;
            this.list = list;

        
        @Override
        public int getCount() 
            return list.size();
        
        @Override
        public Object getItem(int position) 
            return list.get(position);
        
        @Override
        public long getItemId(int position) 
            return position;
        
        private class ViewHolder 
            LinearLayout linearLayout;
            TextView txtview; 


        

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) 

            ViewHolder holder;
            LayoutInflater inflater =  activity.getLayoutInflater();

            if (convertView == null)

            convertView = inflater.inflate(R.layout.listview_row, null);

            holder = new ViewHolder();
            holder.txtview = (TextView) convertView.findViewById(R.id.txtview);
                    convertView.setTag(holder);
            else
            holder = (ViewHolder) convertView.getTag();
            holder.txtview.setText(list.get(position));
            convertView.setOnClickListener(new View.OnClickListener() 
                @Override
                public void onClick(View v) 
                    //do something 
                
            );

并且在 onCreate 中您需要将适配器设置为列表:

listviewAdapter adapter = new listviewAdapter(ActivityName.this, list);
listView.setAdapter(adapter);

这样您就不需要为列表设置 OnItemSelectedListener。

【讨论】:

抱歉,liste_item.xml 文件中没有按钮,只有文本视图.........但是是的,当下一个活动打开时,它有按钮,但在上下文中完全不同【参考方案3】:

将此应用于list_view_item.xml 中的ParentLayout,而不是在ListView 属性内或ListView 活动中的任何位置,如果您在parentAttribute 中使用blocksDescendants,则无需使用focusinTouchmode

android:descendantFocusability="blocksDescendants"

【讨论】:

我从 listview_acitivity.xml 中删除了 android:descendantFocusability="blocksDescendants" 并在最上面的布局中添加到 rootview listview_item.xml,它是 LinearLayout 但仍然没有得到任何响应.....请帮忙如果任何其他建议 在你的 ListView Activity 的每一个地方都删除它,它应该只在你的listview_view.xml

以上是关于Android ListView ClickEvent 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

38.Android之ListView简单学习

Android listview 的用法? 越详细越好。

Android——ListView

ListView / SimpleAdapter 不刷新 - Android

android 怎么让listview 不够一屏 占满一屏

android listview为啥不能滑动