自定义列表视图单选:setChecked() 不起作用



我正在处理具有单选模式的自定义列表视图。我按照以下教程操作并成功实现了它。

自定义单选列表视图

我有一个用例,我想设置一个特定的项目是默认要检查的列表,我试图在适配器中的要求位置执行 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 是相对耗时的操作,因此您应该考虑使用一些缓存。

希望对您有所帮助。

最新更新