画像が含まれるListViewがあり、これらの画像はサーバーから取得され、ローダーが画像をダウンロードしonLoadFinished
てsetAdapter
からListViewにダウンロードします。アダプターを設定した後、ListView の最初の項目を選択しようとしましたが、効果がありません。ListView はまだ選択する準備ができていないのではないかと思ったので、 setSelection 関数をオーバーライドするような奇妙な方法でそれを行うことができました。
public void setSelection(final int position) {
// TODO Auto-generated method stub
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i(TAG, "thread runned.");
boolean is_view_created = false;
while (!is_view_created) {
try {
Thread.sleep(100);
getListView();
if (getListView().getChildAt(position) != null)
is_view_created = true;
else {
Log.i(TAG, "Waiting for the list view to initialize.");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
Log.i(TAG, "Waiting for the list view to initialize.");
}
}
MiddleMenuListFragment.super.setSelection(position);
View initial_selection_view = getListView().getChildAt(position);
initial_selection_view.performClick();
((MiddleMenuListAdapter)getListAdapter()).light_me_up = position;
getActivity().runOnUiThread(new Runnable(){
@Override
public void run() {
((MiddleMenuListAdapter)getListAdapter()).notifyDataSetChanged();
}
});
}
}, 400);
}
しかし、この方法は本当に安全ではありません。時々ループに入る(getListView().getChildAt(position != null)
真にならない)。問題に対するよりエレガントな解決策をアドバイスできますか?