当内容可选时,textView的内容会发生变化

时间:2015-02-22 09:13:30

标签: android android-layout textview screen-rotation

我目前正在开发一个项目,该项目要求我根据数组的内容动态地将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旋转后重新填充内容的方式,尽管我似乎无法确切地确定原因。非常感谢任何帮助。

2 个答案:

答案 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);
  }