レイアウトにTextViewを追加していますが、画面の向きが変わってもそのままにしておきたいです。
次のコードを試しましたが、機能しません。
public class DetailsActivity extends Activity {
private HashMap<View, TextView> views = new HashMap<View, TextView>();;
@Override
public Object onRetainNonConfigurationInstance() {
return views;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.layout44);
findViewById(R.id.layout44_11).setOnLongClickListener(onLongClickListener);
...
HashMap<View, TextView> data = (HashMap<View, TextView>)this.getLastNonConfigurationInstance();
if (data == null) {
System.out.println("is null");
} else {
for(View key : data.keySet()) {
ViewGroup parent = (ViewGroup) key;
System.out.println(key + " " + data.get(key));
System.out.println(parent.getChildCount());
System.out.println("child: " + parent.getChildAt(0));;
parent.removeView(data.get(key));
data.get(key).setText("asd");
data.get(key).setVisibility(View.VISIBLE);
parent.addView(data.get(key));
}
System.out.println("-------------------");
}
}
private View.OnLongClickListener onLongClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
ViewGroup parent = (ViewGroup) v;
if(parent != null) {
TextView tv = new TextView(getApplicationContext());
tv.setText("TextView");
views.put(parent, tv);
parent.addView(tv);
}
return false;
}
};
}
例外が発生しています:
原因:java.lang.IllegalStateException:指定された子にはすでに親があります。最初に子の親でremoveView()を呼び出す必要があります。
なんで?私は何が間違っているのですか?それを解決する方法は?