以前に次の方法で手動で行ったことがあります。
リストの選択状態を保持する配列を作成し、アダプター コンストラクターでそれを初期化してから、getView メソッド (現在選択されている項目がスクロールして表示されなくなる場合) と onItemClick メソッド (現在の選択を変更して回転する場合) でそれを参照します。古いものから)。
public static boolean selectedStatus[]; // array to hold selected state
public static View oldView; // view to hold so we can set background back to normal after
コンストラクター は配列を初期化します
public class MyCursorAdapter extends SimpleCursorAdapter {
private LayoutInflater mInflater;
private int layout;
public MyCursorAdapter(Context context, int layout, Cursor c,
String[] from, int[] to, int flags) {
super(context, layout, c, from, to, flags);
mInflater = LayoutInflater.from(context);
this.layout = layout;
selectedStatus = new boolean[c.getCount()];
for (int i = 0; i < c.getCount(); i++) {
selectedStatus[i] = false; // Start with all items unselected
}
}
}
子がビューの外にスクロールするときに必要なgetView
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = View.inflate(context, layout, null);
if(selectedStatus[position] == true){
v.setBackgroundResource(R.color.blue);
} else {
v.setBackgroundResource(R.color.black);
}
return v;
}
onItemClick 配列内および画面上の選択項目を変更する
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
mRowId = id;
EventDisplayFragment eventdisplay = new EventDisplayFragment();
getFragmentManager().beginTransaction()
.replace(R.id.rightpane, eventdisplay).commit();
if(MyCursorAdapter.oldView != null){
MyCursorAdapter.oldView.setBackgroundResource(R.color.black); // change the background of the old selected item back to default black }
MyCursorAdapter.oldView = v; // set oldView to current view so we have a reference to change back on next selection
for (int i = 0; i < selectedStatus.length; i++) {
if(i == position){ // set the current view to true and all others to false
selectedStatus[i] = true;
} else {
selectedStatus[i] = false;
}
}
}
v.setBackgroundResource(R.color.blue);
return true;
}
});