【发布时间】:2012-08-06 21:52:56
【问题描述】:
我正在将 TextViews 添加到我的布局中,并且我想在屏幕方向改变时保留它们。
我尝试了以下代码,但它不起作用。
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;
}
};
}
我遇到了异常:
Caused by: java.lang.IllegalStateException: 指定的孩子 已经有了父母。您必须在孩子的父母上调用 removeView() 首先。
为什么?我究竟做错了什么?如何解决?
【问题讨论】:
-
我正在将 TextViews 添加到我的布局中,并且我想在屏幕方向发生变化时保留它们。>>>> 无论如何它们仍然在屏幕上。你到底想要实现什么??
-
正如您在附加代码中看到的,我将 TextViews 添加到布局中。更改屏幕方向后,它们会消失。我想保留它们。另外我有两种布局:纵向和横向,但我不知道它是否导致错误。
标签: android view screen-orientation