【问题标题】:CheckBox state with BaseAdapter带有 BaseAdapter 的 CheckBox 状态
【发布时间】:2015-07-13 14:38:33
【问题描述】:

我正在编写我的第一个 Android 应用程序。出于测试目的,我在 mainactivity 中显示了一个对象列表(类 cElement)。

public class cElement {
private Integer Id;
private String Name;
private String Description;
private Boolean Checked;

....
}

ListView 通过自定义适配器链接到列表。自定义适配器扩展了 BaseAdapter,我从列表中扩展了每个元素的布局。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content" >
<TextView
        android:id="@+id/id"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@+id/standard"
        android:textSize="20dp"
        android:layout_weight="1">
</TextView>
<TextView
        android:id="@+id/name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@+id/standard"
        android:textSize="20dp"
        android:layout_weight="2">
</TextView>
<TextView
        android:id="@+id/description"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="@+id/standard"
        android:textSize="20dp"
        android:layout_weight="3">
</TextView>
<CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"
        android:id="@+id/checkBox"/>
</LinearLayout>

第一个问题:现在我想用一个按钮一步检查所有复选框。什么是好的风格?

  1. 我直接更新列表,调用适配器的notifyDataSetChanged方法
  2. 我在适配器内创建了一个方法 checkall() 并从外部调用它。

第二个问题:我想知道选中的是哪个 CheckBox。所以我创建了一个事件处理程序 setOnClickListener 并将位置保存在适配器内的一个变量中。这是正确的方法吗?

【问题讨论】:

    标签: android listview checkbox android-inflate notifydatasetchanged


    【解决方案1】:

    第一个问题:现在我想用一个按钮一步检查所有复选框。什么是好的风格?

    您的列表似乎包含布尔检查状态,您应该更新列表的所有对象并在单击 checkAll 按钮时再次通知列表。

    第二个问题:我想知道选中了哪个 CheckBox。所以我创建了一个事件处理程序 setOnClickListener 并将位置保存在适配器内的变量中。这是正确的方法吗?

    你应该从片段/活动中实现监听器,当用户点击任何复选框时,从适配器,你将在片段/活动中获得点击事件,在那里,你更新你的列表项以检查状态。

    所以,在你的片段/活动中:

    new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    v.getTag()
                }
            }
    

    在适配器中,为每个项目设置标签,带有项目ID/项目对象,这样当用户点击任何项目时,你就会知道那个项目对象/项目ID。

    【讨论】:

    • 感谢您的建议。我会努力实现的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 2011-09-04
    • 2015-11-20
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    相关资源
    最近更新 更多