旋转时保留TextView中的文本

时间:2019-01-07 13:21:06

标签: android android-studio android-fragments fragment

我有两个片段TestOneFragment(这是默认片段)和TestTwoFragment,这两个片段被添加到后堆栈中。当TestTwoFragment处于前景时旋转屏幕时,文本也应保持不变。

这是片段中的onCreateView方法

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View? {

    viewHolder = inflater.inflate(R.layout.fragment_test_two, container, false)

    arguments?.getString("msg").run {
        if (this != null)
            viewHolder.tvFragTestTwo.text = this
        else
            viewHolder.tvFragTestTwo.text = "NO BUTTONS CLICKED"
    }

    listener.onCreateListener(viewHolder.tvFragTestTwo.text.toString())

    return viewHolder
}

我已经创建了一个界面OnCreateListener,以便可以在“家长活动”中使用textView。这是该接口的实现。

override fun onCreateListener(string: String) {
    val bundle = Bundle()
    bundle.putString("msg", string)
    testTwoFragment.arguments = bundle
}

每次旋转屏幕时,文本都会设置为默认值。

2 个答案:

答案 0 :(得分:0)

每次旋转屏幕时,Android都会销毁并重新创建绑定到片段的活动。为了将文本保留在文本视图中,您应该将信息保存在onSaveInstanceState方法中,并在onActivityCreated方法中恢复保存的信息。

public class MainFragment extends Fragment {

    // These variable are destroyed along with Activity
    private String text;

    ...

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("your_text_id", text); // this text comes from your textview
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        text = savedInstanceState.getString("your_text_id");
    }

}

答案 1 :(得分:0)

我添加了 android:configChanges="orientation|screenSize" 在清单文件中的相应活动标签中,它对我有用。