誰かがこれがなぜ起こるのか教えてください。以下をお読みください。 Buttonを拡張する独自のクラスDataを持っています。私のアクティビティのクラスには、各ボタンのクリックで新しいDataオブジェクトを追加するListがあります。私は、構成の変更、すなわち向きの変更の後に、クラスDataの作成されたオブジェクトを画面上に保持したい。だからonSaveInstanceState()をオーバーライドし、それを使ってonCreate()メソッドでデータを復元しました。上記のメソッドでは、すべてのDataオブジェクトをオブジェクトのリストから保存しています。 onCreate()メソッドでは、私はこのように私のデータを復元しようとしている:LinearLayout.addView(view view)メソッド呼び出しでIllegalStateExceptionが発生する
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.Button01);
layout = (LinearLayout) findViewById(R.id.MyLayout);
dataList = new ArrayList<Data>();
if(savedInstanceState != null) {
int numberOfObjects = savedInstanceState.getInt("Number of objects");
for (int i = 1; i < numberOfObjects; i++) {
Data tmp = (Data)savedInstanceState.getSerializable("Button name " + i);
if (tmp != null) {
dataList.add(tmp);
}
if (dataList.size() != 0) {
// I'm using one of the lines at a time, uncommented here just for example:
layout.addView((Data)dataList.get(i-1)); // IllegalStateException happens here with advice to invoke removeView() method. I tried to call it on the method beginning, but no success.
layout.addView(new Data(getApplicationContext())); // This one is perfectly fine
}
}
}
だから、最初のケースでは、私はIllegalStateExceptionが取得していますが、それは二人のための大きい働いています。私はその違いを理解していない。
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.d("Dev", "onSaveInstanceState()");
outState.putInt("Number of objects", dataList.size());
for (Data object : dataList) {
outState.putSerializable("Button name " + object.getNumber() , object);
}
}
そして、私のデータクラスが、何も特別な:
は、念のため、ここで私のonSaveInstanceState()メソッドである
package as.as.as;
import java.io.Serializable;
import android.content.Context;
import android.widget.Button;
public class Data extends Button implements Serializable {
public static int counter;
public int number;
public Data(Context context) {
super(context);
counter++;
this.number = counter;
this.setText("Button number " + Integer.toString(number));
}
public String getNumber() {
return Integer.toString(number);
}
}
"(Data)dataList.get(i-1)"には既に親があると思います。 どのようにデータをdataListに追加しますか? –