今日のエラー

毎日遭遇する色々なエラーを書き留めています。ときどきエラーじゃない記事も有り。

フラグメントが表示されない

Android で、Activity のレイアウト内で指定した ListFragment が表示されない現象が発生。本来フラグメントが表示されるはずの領域が、処理中のまま何も表示されない。

なにか単純なミスだと思うんだけど。

f:id:junf:20130105091355p:plain


※解決

ListFragment に ListAdapter を設定する時、

getListView().setAdapter(adapter);

のように、内部の ListView に直接アダプタを設定していた事が原因だった。以下のように、ListFragment#setListAdapter を使用すれば正常に動作する

setListAdapter(adapter);

Android のソース(ListFragment.java)を見ると、setListAdapter は内部の ListView にアダプタを設定(mList.setAdapter)するだけでなく、 mAdapter というフィールドにアダプタを記録・保持している。従って、直接 ListView にアダプタを登録しただけでは正常に機能しない。

ちょっとハマッてしまった。


リファレンスにちゃんと書いてあった(^^;

You must use ListFragment.setListAdapter() to associate the list with an adapter. Do not directly call ListView.setAdapter() or else important initialization will be skipped.