当内容可选择时,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.xmlactivity 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);
  }