我目前正在开发一个项目,该项目要求我根据数组的内容动态地将textView对象添加到LinearLayout。
chapter = Home.chapters.get(index);
layout.removeAllViews();
String dataText = chapter.content;
String[] dataArray = dataText.split("~");
for (int i = 0; i < dataArray.length; i++) {
String paragraph = dataArray[i];
String outputParagraph = paragraph.replace("`", "\n");
View view = getLayoutInflater().inflate(R.layout.ttc_text, null);
final TextView tv = (TextView) view.findViewById(R.id.textView);
tv.setText(outputParagraph);
//tv.setTextIsSelectable(true);
layout.addView(view);
}
TextView titleView = (TextView) findViewById(R.id.title);
titleView.setText("Chapter " + chapter.title);
layout.setOnTouchListener(new OnSwipeTouchListener(getBaseContext()) {
public void onSwipeRight() {
retreatBackward();
}
public void onSwipeLeft() {
advanceForward();
}
});
我已经配置了saveOnItemStateChanged,以便在旋转屏幕时恢复textViews的正确内容。
if (savedInstanceState != null) {
index = savedInstanceState.getInt("Chapter");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("Chapter", index);
super.onSaveInstanceState(savedInstanceState);
}
但是,每当旋转屏幕时,父布局中的textViews都不会显示其原始内容。相反,原始布局中相同数量的textViews都显示相同的内容,即最终textView的内容添加到布局中。
仅当TextView中的文本通过setTextIsSelectable()
函数或XML标记指定为可选时,才会出现此问题。因此,文本的可选性必然会在一定程度上影响TextViews旋转后重新填充内容的方式,尽管我似乎无法确切地确定原因。非常感谢任何帮助。
答案 0 :(得分:0)
第一
super.onSavedInstanceState(...)应该是第一个被调用的东西。你的'保存'应该在之后。
第二
您很可能需要保存所有文本视图,以便重新填充它们,或者保存数组并根据它重新填充。
我发现这个网站非常适合解释保存实例状态处理的输入和输出。
http://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-1/
答案 1 :(得分:0)
我认为问题是由于您的设备配置发生了变化。旋转设备时,会发生配置更改事件。将以下代码添加到 Manifest.xml 和活动类中。希望,这将解决您的问题。
对Manifest.xml文件的更改 ---&gt; (假设XYZ是您的活动类)
<activity android:name=".activities.XYZ"
android:configChanges="orientation|screenSize"/>
将此添加到您的XYZ活动类---&gt;
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}