2014/09/11

[android]ListViewで一部をグレーにしようとしたが、先頭もグレーになった

ListViewでメニューを作ったけど、まだ2番目と3番目が未実装なので、押せないようにした。
それはArrayAdapterのisEnabled()を乗っ取ればよかった。
しかし文字色が変わらなかったので、そのときだけ文字色をグレーにしようとした。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    TextView view = (TextView)super.getView(position, convertView, parent);
    ListData item = getItem(position);
    if ((view != null) && (item != null)) {
        view.setText(item.title);
        if ((position != 1) && (position != 2)) {
            //view.setTextColor(Color.BLACK);
        }
        else {
            view.setTextColor(Color.LTGRAY);
        }
    }
    return view;
}

これだと、なぜかリストの先頭もグレーになってしまうのだ。
コメントアウトしているBLACKのところを有効にすると、大丈夫。
うーむ。

isEnabled()を元に戻してみたが、変わらず。
じゃあ、真ん中だけグレーにしたらどうなる?とやってみると、先頭と3番目がグレーになった。
どっかでViewが使い回されるから、デフォルトじゃない値を入れるときは、そうじゃないときはデフォルトの値を指定するようにすべきなのかね。

2 件のコメント:

  1. ListViewでは中の行要素のレイアウトは使いまわしされます。なので、デフォルトは明示的に記述したほうがいいっす。

    返信削除
    返信
    1. やっぱりそうなんですね。
      iOSでも似たような現象を見たことがあったので、もしや・・・と思ったのでした。
      スクロールアウトしたものだけ再利用かと思ったんですが、いらないものはどんどん使っちゃうよおじさんなんですね。。

      削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。