ListViewでメニューを作ったけど、まだ2番目と3番目が未実装なので、押せないようにした。
それはArrayAdapterのisEnabled()を乗っ取ればよかった。
しかし文字色が変わらなかったので、そのときだけ文字色をグレーにしようとした。
@Overridepublic 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が使い回されるから、デフォルトじゃない値を入れるときは、そうじゃないときはデフォルトの値を指定するようにすべきなのかね。
ListViewでは中の行要素のレイアウトは使いまわしされます。なので、デフォルトは明示的に記述したほうがいいっす。
返信削除やっぱりそうなんですね。
削除iOSでも似たような現象を見たことがあったので、もしや・・・と思ったのでした。
スクロールアウトしたものだけ再利用かと思ったんですが、いらないものはどんどん使っちゃうよおじさんなんですね。。