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;
        }
    };

今のところ、リストで無効にしたい項目が 2 つあり、テキストを濃い灰色で表示したいと考えています。私の問題は、位置 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 オブジェクトは常に同じオブジェクトである可能性が高くなります。したがって、色をビューに戻す必要があります。または、状態と選択済み (TextView の setEnabled(false) など) を使用できます。

于 2012-08-23T09:32:28.217 に答える