我正在处理具有单选模式的自定义列表视图。我按照以下教程操作并成功实现了它。
自定义单选列表视图
我有一个用例,我想设置一个特定的项目是默认要检查的列表,我试图在适配器中的要求位置执行 setChecked(true),但它不起作用。谁能帮我如何实现它。
提前谢谢。
这个消息来源说:
基本上,单选 ListView 需要您提供给它的小部件来实现可检查接口。 LinearLayout et al don't.因此,您需要创建一个继承 LinearLayout(或要用于项目的任何布局)并实现必要接口的自定义布局。
从此源,您可以使用Activity
内的自定义适配器进行设置:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// set the choice mode
final ListView list = getListView();
list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
// custom adapter
list.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item,
R.id.title, text) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
ImageView icon = (ImageView) v.findViewById(R.id.img);
if (list.isItemChecked(position)) {
icon.setImageResource(R.drawable.checked);
} else {
icon.setImageResource(R.drawable.unchecked);
}
return v;
}
});
}
但是,此版本存在一些性能问题 - findViewById 和 setImageResource 是相对耗时的操作,因此您应该考虑使用一些缓存。
希望对您有所帮助。