画面の回転後に選択したリスト項目をプログラムで (再) 強調表示したい。
public class MyListFragment extends ListFragment {
private static final String tag = MyListFragment.class.getName();
private static final String indexTag = "index";
private int index = -1;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
if (savedInstanceState != null) {
index = savedInstanceState.getInt(indexTag, -1);
Log.d(tag, "Restored index " + index + " from saved instance state.");
}
}
@Override
public void onResume() {
super.onResume();
if (index >= 0) {
showDetails(index);
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
showDetails(position);
}
private void showDetails(int index) {
this.index = index;
getListView().setItemChecked(index, true);
// update details panel
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(indexTag, index);
}
}
カスタム アダプターのアイテム ビューとして CheckedTextView を使用します。
public class MyListAdapter extends BaseAdapter {
private static final String tag = MyListAdapter.class.getName();
@Override
public CheckedTextView getView(int position, View convertView, ViewGroup parent) {
if (convertView == null || !(convertView instanceof CheckedTextView)) {
final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.simple_list_item_single_choice, parent, false);
}
((CheckedTextView)convertView).setText("test");
return (CheckedTextView)convertView;
}
}
画面の回転showDetails()
が呼び出され、詳細パネルが更新された後setItemChecked()
、何も実行されず、アイテムがまだ強調表示されていません。setItemChecked()
また、タッチイベントでクリックした項目は不要で、とにかく行が強調表示されることに気付きました。
では、onResume ステージでアイテムをプログラムでチェックするにはどうすればよいでしょうか。