2014/09/11

[android]ListViewのitemをdisableにするとlineがinvisibleだ

がんばって英語を多用してみました。。

前の記事で、ArrayAdapter#isEnabled()をオーバーライドする件を書いたが、あれをやるとそのアイテム前後の罫線が消えてしまうのだ。

image

これは、Viewに対しては何もしてないのだ。
もしかして、disableだから罫線もいらんでしょう?ってことだろうか。
罫線を含めてitemだからかなl。

おっと、いつもの私なら、もうAndroidわからーん、で投げてしまうのだが、少し経験値がついた。
こういうときは、罫線のカスタマイズの方法を調べてみるとよいのだ。
そうすると、android:dividerって項目らしい。
これで検索すると出てきた。

http://stackoverflow.com/questions/5375138/disappearing-divider-in-listview-when-arrayadapter-isenabled-returns-false

areAllItemsEnabled()でtrueを返すようにするとよい、か。
これなら簡単だ。
よかったよかった・・・・あれ、変わらない。
呼ばれていないわけではないのだが、trueを返してもfalseを返しても、何も変わらない。

呼ばれるのは、HeaderViewListAdapter#areAllItemsEnabled()からだ。
Headerとついているのが、なんか嫌な予感がする。

HeaderとかFooterがついている場合はこっち、ということだ。
確かに今回、ヘッダはないけどフッタは付けてるんだった。
http://java.dzone.com/articles/android-listview-%E2%80%93-fixing
ぐわあ、実装が増えるな。

//罫線は出したい
ListView.FixedViewInfo footerInfo = listView.new FixedViewInfo();
footerInfo.view = footer;
footerInfo.isSelectable = false;
ArrayList headers = new ArrayList(0);
ArrayList footers = new ArrayList(1);
footers.add(footerInfo);
HeaderViewListAdapter wrapper = new HeaderViewListAdapter(headers, footers, adapter) {
    @Override
    public boolean areAllItemsEnabled() {
        return true;
    }
};
listView.setAdapter(wrapper);

image

やれやれだぜ・・・。

あと、サンプル通りに書くと、ArrayList#add()を呼ぶところで「unchecked」って出てくる。
どうも、型チェックが働かんぞ、と言っているらしいので、

ArrayList<ListView.FixedViewInfo> headers = new ArrayList<ListView.FixedViewInfo>(0);

こんな感じにすると消えた。

0 件のコメント:

コメントを投稿

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

注: コメントを投稿できるのは、このブログのメンバーだけです。