当内容可选择时,textView 的内容会发生变化
Contents of textView change when contents are selectable
我目前正在从事一个项目,该项目要求我根据数组的内容将 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 以便在屏幕旋转时恢复 textView 的正确内容。
if (savedInstanceState != null) {
index = savedInstanceState.getInt("Chapter");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("Chapter", index);
super.onSaveInstanceState(savedInstanceState);
}
但是,每当屏幕旋转时,父布局中的 textView 不会显示其原始内容。而是原始布局中相同数量的textView都显示相同的内容,即最终添加到布局中的textView的内容。
仅当通过 setTextIsSelectable()
函数或 XML 标记将 TextView 中的文本指定为可选时,才会出现此问题。因此,文本的可选性一定会在某种程度上影响 TextViews 的内容在旋转后重新填充的方式,尽管我似乎无法确定原因。如有任何帮助,我们将不胜感激。
第一
super.onSavedInstanceState(...) 应该是第一个被调用的东西。你的 'save' 东西应该在后面。
第二
您很可能需要保存所有文本视图,以便重新填充它们,或者保存数组并基于它重新填充。
我发现这个站点非常适合解释保存实例状态处理的来龙去脉。
http://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-1/
我认为问题是由于您的设备配置更改所致。当您旋转设备时,会发生配置更改事件。将以下代码添加到您的 Manifest.xml 和 activity class。希望,这会解决您的问题。
对 Manifest.xml 文件的更改 --->(假设 XYZ 是您的 activity class)
<activity android:name=".activities.XYZ"
android:configChanges="orientation|screenSize"/>
将此添加到您的 XYZ activity class --->
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
我目前正在从事一个项目,该项目要求我根据数组的内容将 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 以便在屏幕旋转时恢复 textView 的正确内容。
if (savedInstanceState != null) {
index = savedInstanceState.getInt("Chapter");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putInt("Chapter", index);
super.onSaveInstanceState(savedInstanceState);
}
但是,每当屏幕旋转时,父布局中的 textView 不会显示其原始内容。而是原始布局中相同数量的textView都显示相同的内容,即最终添加到布局中的textView的内容。
仅当通过 setTextIsSelectable()
函数或 XML 标记将 TextView 中的文本指定为可选时,才会出现此问题。因此,文本的可选性一定会在某种程度上影响 TextViews 的内容在旋转后重新填充的方式,尽管我似乎无法确定原因。如有任何帮助,我们将不胜感激。
第一
super.onSavedInstanceState(...) 应该是第一个被调用的东西。你的 'save' 东西应该在后面。
第二
您很可能需要保存所有文本视图,以便重新填充它们,或者保存数组并基于它重新填充。
我发现这个站点非常适合解释保存实例状态处理的来龙去脉。
http://www.intertech.com/Blog/saving-and-retrieving-android-instance-state-part-1/
我认为问题是由于您的设备配置更改所致。当您旋转设备时,会发生配置更改事件。将以下代码添加到您的 Manifest.xml 和 activity class。希望,这会解决您的问题。
对 Manifest.xml 文件的更改 --->(假设 XYZ 是您的 activity class)
<activity android:name=".activities.XYZ"
android:configChanges="orientation|screenSize"/>
将此添加到您的 XYZ activity class --->
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}