【问题标题】:Android ListView ClickEvent not workingAndroid ListView ClickEvent 不起作用
【发布时间】: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 中

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

【问题讨论】:

    标签: android xml android-layout listview android-listview


    【解决方案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
    猜你喜欢
    • 2020-10-03
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多