我有一个自定义适配器,如下所示,
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");
}
}
}
});
但是,我的列表现在只显示每行的复选框,同时应显示文本视图和复选框。此外,无论我触摸复选框还是listitem本身,我的onClickListener都能正常工作。只有在单击复选框时才应调用Log.d。
答案 0 :(得分: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");
}
}
});
答案 1 :(得分:0)
嗯,您需要在声明复选框后立即使用适当的参数字符串checkbox.setText
为checkbox.setText(items.get(position));
调用。
答案 2 :(得分:0)
如提到的npace,您没有为视图设置文本。但是视图重用会有另一个问题。由于在列表视图中,视图被重复使用,您的复选框可能最终再次被使用,但它不会记住它所处的状态。您需要一个viewHolder类并在内部缓存复选框的状态并设置复选框状态。将再次画画。以下是需要完成的示例(我编写了一个可重复的多选择器小部件):