1

我为我的 ListView 制作了一个适配器,如下所示:

SimpleAdapter adapter = new SimpleAdapter(this.getBaseContext(), listItem, R.layout.list_cell_icon, new String[] { "img", "title", "description" }, new int[] { R.id.img, R.id.title, R.id.description }) {

        @Override
        public boolean isEnabled (int position) {

            if(position == 1 || position == 2) {
                return false;
            }
            return true;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View v = super.getView(position, convertView, parent);

            if(position == 1 || position == 2) {

                TextView tv = (TextView) v.findViewById(R.id.title);
                tv.setTextColor(Color.DKGRAY);
            }

            return v;
        }
    };

现在我想在列表中禁用两个项目,然后我想以深灰色显示文本。我的问题是位置 0 的行中的文本颜色也更改为深灰色。怎么可能 ?我错过了什么?

4

1 回答 1

1

你需要添加这个:

TextView tv = (TextView) v.findViewById(R.id.title);    
if(position == 1 || position == 2) {
    tv.setTextColor(Color.DKGRAY);
} else {
    tv.setTextColor(Color.WHITE);
}

原因是 getView 被多次调用,不一定按特定顺序调用,并且 getView 回收视图。因此,您的 TextView 对象很可能始终是同一个对象。因此,您必须将颜色设置回视图。或者,您可以使用 state 和 selected(如 TextView 上的 setEnabled(false))

于 2012-08-23T09:32:28.217 回答