自定义Listview单选:setChecked()不起作用

时间:2014-12-09 11:13:28

标签: android android-listview android-custom-view

我正在使用单一选择模式处理自定义列表视图。我已经按照下面的教程成功实现了它。

Custom Single Choice ListView

我有一个用例,我想设置一个特定的项目是默认情况下要检查的列表, 我试图在适配器的require位置执行setChecked(true),但它没有用。 任何人都可以帮助我实现它。

提前致谢。

1 个答案:

答案 0 :(得分:0)

source说:

  

基本上,单选ListView期望您提供的小部件实现Checkable接口。 LinearLayout等人并没有。因此,您需要创建一个继承LinearLayout(或您想要用于项目的任何布局)的自定义布局,并实现必要的界面。

从此source开始,您可以使用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是相对耗时的操作,所以你应该考虑使用一些缓存。

希望它对你有所帮助。