アンドロイドでアダプターにセットしたスピナーを画面回転させても維持させたい
アンドロイドでonCreateではなく、onclick内でスピナーをアダプターにセットしているのですが、
画面回転した際に、onclickで作ったスピナーの内容が消えてしまいます。
のでonSaveInstanceStateでスピナーごと保存し、 onRestoreInstanceState内で取り出したスピナーのデータをそのままアダプターにセットしたいのですが、
Android Parcelable を使ってクラスのメンバを一時保存
を参考にして自作のスピナーを一時保存して取り出そうとしたのですが初心者の為、何がいけないのか上手くいきません。どなたか添削のほどお願いします。
その他必要なもの等あればコメントにてお願いします。
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;
}
MainActiviy.java 一部抜粋
public class MainActivity extends Activity
implements OnClickListener {
AllContactParcelable AllContactParcelable;
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;
}
:
:
:
:
:
: (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);
}
}
}