【问题标题】:Custom adapter not displaying correct information自定义适配器未显示正确信息
【发布时间】:2013-12-05 14:48:51
【问题描述】:

我有一个自定义适配器,如下所示,

public class CustomAdapter extends ArrayAdapter<String> {

private Activity activity;
private List<String> items;
private LayoutInflater inflater = null;

public CustomAdapter(Activity a, int resource, List<String> i) {
    super(a, resource, i);
    activity = a;
    items = i;
    inflater = (LayoutInflater) a
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

public View getView(int position, View convertView, ViewGroup parent) {
    View vi = convertView;

    if (vi == null) {
        vi = inflater.inflate(
                android.R.layout.simple_list_item_multiple_choice, parent,
                false);
    }

    final CheckedTextView checkbox = (CheckedTextView) vi
            .findViewById(android.R.id.text1);
    checkbox.setText(items.get(position));
    Log.d("test", "testing");

    checkbox.setOnClickListener(new OnClickListener() {
        public void onClick(View view) {
            if (!checkbox.isChecked()) {
                checkbox.setChecked(true);
                Log.d("Test", "checked");

                if (checkbox.isChecked()) {
                    checkbox.setChecked(false);
                    Log.d("test", "unchecked");
                }
            }
        }
    }); 

但是,我的列表现在只为每一行显示一个复选框,而它应该显示一个文本视图和一个复选框。此外,无论我触摸复选框还是列表项本身,我的 onClickListener 都可以工作。只有在单击复选框时才应调用 Log.d。

【问题讨论】:

  • 你能插入xml文件simple_list_item_multiple_choice吗?关于文本视图的问题可能存在
  • @GerryR 是框架的默认组件,因为它以“android.R.layout”开头

标签: android android-listview adapter


【解决方案1】:

我的列表现在只为每一行显示一个复选框,而它应该是 显示一个文本视图和一个复选框

您正在从框架中扩充默认资源,但您没有为您的项目设置文本。您可以像这样使用 setText 方法(继承自 TextView):

checkbox.setText(items.get(position));

Log.d 仅应在单击复选框时调用。

您没有检查复选框是否被单击(并且对您的复选框进行了不必要的强制转换)。你可以简单地做这样的事情:

checkbox.setOnClickListener(new OnClickListener() {
        public void onClick(View view){
            if (checkbox.isChecked()){
                Log.d("Test", "testing2");
            }
        }
});

【讨论】:

    【解决方案2】:

    好吧,在声明复选框之后,您需要使用正确的参数字符串调用checkbox.setText,例如checkbox.setText(items.get(position));

    【讨论】:

      【解决方案3】:

      正如 npace 所提到的,您没有为视图设置文本。但是视图重用会有另一个问题。由于在列表视图中,视图被重复使用,您的复选框最终可能会再次被使用,但它不会记住它所处的状态。您需要一个 viewHolder 类并在内部缓存复选框的状态并设置复选框状态将再次被抽签。这是一个需要做的例子(我写了一个可重复使用的多选器小部件):

      Multiple-Item-Selector

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多