ListView内のチェックボックスの結果を実際に保持する方法を説明する記事はどこにもありません。たくさんのものを表示する方法を示していますが、それらはすべて保存方法を省いています。リストビューからファイルにチェックされたアイテムを保存する
メニューアイテムから[お気に入りを設定]をクリックすると、名前のリストを読み込んでそれぞれにチェックボックスを表示したいと思います。私は複数のチェックをすることができるようにしたい、そして、チェックされた設定で何らかの形でリストをSDカード上の永続ストレージに保存したいと思っています。リストには「名前」の値と「isChecked」の値が含まれている必要があります
私の問題は構造とスコープのいずれかであると思うので、以下の構造をすべてのコードではなく、むしろメインメニューアクティビティで構文
よりも、私は、カスタムアダプタにリスト(checkedlist)を渡す
public class SetFavourites extends ListActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.
.
FavouritesAdapter adapter = new FavouritesAdapter(this, checkedList);
setListAdapter(adapter);
}
アダプタがonCheckedChangeListenerを持っているので、チェックボックスは、私が持っている時点では、変更されるたびに//ここに私が立ち往生しているところに、その行の名前とチェック値があります
public class FavouritesAdapter extends ArrayAdapter<JSONObject> implements OnCheckedChangeListener {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
}
@Override
public void onCheckedChanged(CompoundButton cb, boolean isChecked) {
JSONObject checked = getItem(posSelected);
// Here's where I'm stuck
}
}
私の質問は、複数のチェックイベントがある場合、どのようにデータを保持できますか?
行の名前とチェックされた状態を保持するモデルを作成すると、そのモデルをアクティビティからインスタンス化するか、またはアダプタからインスタンス化できますか?
アダプタ内に 'checking'が完了したことを通知するイベントはないため、モデルに追加することはできますが、保存はできません。
アダプタがモデルをインスタンス化する場合、メインアクティビティでどのように保存できますか?データの保存を完了するためにどのようなイベントを使用できますか?戻るボタンメソッド(メインアクティビティ内で定義されているため、アダプタ内で動作できません)、またはアクティビティonStop()メソッドも同様です。
アクティビティでデータモデルをインスタンス化して渡した場合、どのようにして再びパスされて保存されますか?
ご覧のとおり、私はこれにアプローチする方法と完全に混同しています。
おかげ
SharedPreferencesを保存したい場合は、それを永続化する方がよいでしょう。また、実装する方が簡単です。 http://developer.android.com/reference/android/content/SharedPreferences.html – FoamyGuy
どのようなデータ型の配列リストにも状態を保存し、それをjson配列に変換し、json文字列を環境設定にシリアル化しますそれはいくつかの巨大なリストではないと仮定して、私はこれをはるかに簡単にするためにGSONを使用します。私はちょうどこれを行うには、アダプタにメソッドを追加します。通常、データを保持する場所は、アクティビティのonPauseです。したがって、adapter.saveState()またはそのようなもの。 – Idistic