リンク内容
を参考にしてonSaveInstanceStateでスピナーごと保存し、 onRestoreInstanceState内で取り出したスピナーのデータをそのままアダプターにセットしたいのですが、上手くできません。
実装したい事はonclick内で作成したドロップダウンが画面回転した際に消えてしまい、消えないようにしたいです。
何がいけないのかわかる方ご教授または添削をお願いします。
AllContactParcelable.java
public class AllContactParcelable implements Parcelable, SpinnerAdapter { private ArrayList<MainActivity.RowData[]> contactList; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { //out.writeTypedList(contactList); } public static final Creator<AllContactParcelable> CREATOR = new Creator<AllContactParcelable>() { public AllContactParcelable createFromParcel(Parcel in) { return new AllContactParcelable(in); } public AllContactParcelable[] newArray(int size) { return new AllContactParcelable[size]; } }; private AllContactParcelable(Parcel in) { //contactList = (ArrayList<MainActivity.RowData[]>) (ArrayList<MainActivity.RowData[]>) in.createTypedArrayList(MainActivity.RowData.CREATOR); } public AllContactParcelable(ArrayAdapter<MainActivity.RowData> contactList) { //this.contactList = contactList; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return null; } @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getCount() { return 0; } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { return null; } @Override public int getItemViewType(int position) { return 0; } @Override public int getViewTypeCount() { return 0; } @Override public boolean isEmpty() { return false; } }
MainActivity.java 一部抜粋
public static class RowData implements Parcelable { private String name; private String code; public int describeContents() { return 0; } public void writeToParcel(Parcel out, int flags) { out.writeString(name); out.writeString(code); } public static final Parcelable.Creator<RowData> CREATOR = new Parcelable.Creator<RowData>() { public RowData createFromParcel(Parcel in) { return new RowData(in); } public RowData[] newArray(int size) { return new RowData[size]; } }; private RowData(Parcel in) { name = in.readString(); code = in.readString(); } // コンストラクタ・セッタ・ゲッタ省略 RowData(String name, String code) { this.TOKCO = name; this.TOKNA = code; } public String getname() { return name; } public String getcode() { return code; } @Override public String toString() { return TOKNA; } } AllContactParcelable AllContactParcelable; : : : : : : (onclick内でドロップダウン作成) db = helper.getReadableDatabase(); // 列名の定義 String[] columns = {"NAME", "CODE", "NAK"}; // 得意先データの取得 Cursor cursor = db.query(DB_TABLE, columns, null, null, null, null, "CODE"); final RowData[] dataArray = new RowData[cursor.getCount()]; // 取得したデータをテーブル明細部に設定 for (int i = 0; cursor.moveToNext(); i++) { dataArray[i] = new RowData(cursor3.getString(0),cursor3.getString(0) + "\n" + cursor3.getString(1)); } ArrayAdapter<RowData> adapter = new ArrayAdapter<>(this, R.layout.list, dataArray); Spinner spinner = (Spinner) findViewById(R.id.n_naiyo); spinner3.setAdapter(adapter); AllContactParcelable = new AllContactParcelable(adapter); @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putParcelable("contact", AllContactParcelable); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); AllContactParcelable = savedInstanceState.getParcelable("contact"); Spinner spinner = (Spinner) findViewById(R.id.n_naiyo); spinner.setAdapter(AllContactParcelable); }
あなたの回答
tips
プレビュー