Android ListView ClickEvent 不起作用
Posted
技术标签:
【中文标题】Android ListView ClickEvent 不起作用【英文标题】:Android ListView ClickEvent not working 【发布时间】:2015-12-19 09:09:11 【问题描述】:我在 android 中使用自定义 ListView
,一切正常,将数据提取到列表中。早些时候,点击事件可以正常工作,但是当我在 litst_view_item.xml 文件中应用自定义背景的自定义 TextView
和 LinerLayout
时,它的点击事件现在不起作用,请帮助我。
如何消除此错误?
我尝试了所有代码示例,例如:
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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章