使用BaseAdapter的CheckBox状态

时间:2015-07-13 14:38:34

标签: android listview checkbox android-inflate notifydatasetchanged

我正在编写我的第一个Android应用程序。出于测试目的,我在主活动中显示了一个对象列表(类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>

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

  1. 我直接更新列表并调用适配器的notifyDataSetChanged方法
  2. 我在适配器中创建一个方法checkall()并从外部调用它。
  3. 第二个问题:我想知道检查了哪个CheckBox。所以我创建了一个eventhandler setOnClickListener并将位置保存在适配器中的变量中。这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

  

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

因为看起来你的List包含boolean Checked for status,你应该点击checkAll按钮再次更新列表的所有对象并再次通知列表。

  

第二个问题:我想知道检查哪个CheckBox。所以我创建了一个eventhandler setOnClickListener并将位置保存在适配器中的变量中。这是正确的方法吗?

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

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

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

在适配器中,使用项目ID /项目对象为每个项目设置标记,因此当用户点击任何项目时,您将会知道该项目对象/项目ID。