Java 当移动到另一个片段并返回到该片段时,保存片段中的textView值的正确方法是什么?

Java 当移动到另一个片段并返回到该片段时,保存片段中的textView值的正确方法是什么?,java,android,Java,Android,如何在将textView值从其片段移动到另一个片段时保存该值,并在完成时将该值取回?我尝试过(SharedPreferences、savedInstanceState、show和hide),但没有任何帮助,都在更改方向时保存了片段状态,但在移动到其他片段时没有保存它。。。。 一个包含4个按钮的主活动,每个按钮附加到一个新片段,表示总共4个片段 像这样 @Override protected void onCreate(final Bundle savedInstanceState) {

如何在将textView值从其片段移动到另一个片段时保存该值,并在完成时将该值取回?我尝试过(SharedPreferences、savedInstanceState、show和hide),但没有任何帮助,都在更改方向时保存了片段状态,但在移动到其他片段时没有保存它。。。。 一个包含4个按钮的主活动,每个按钮附加到一个新片段,表示总共4个片段

像这样

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main2);

    final Button firstFrag;
    firstFrag = findViewById(btn_first_frag);
    Button secondFrag;
    secondFrag = findViewById(btn_second_frag);
    Button thirdFrag;
    thirdFrag = findViewById(btn_third_frag);
    Button fourthFrag;
    fourthFrag = findViewById(btn_fourth_frag);

    final SecondFragment secondFragment = new SecondFragment();

    firstFrag.setText(getIntent().getExtras().getString("firstPlayer"));
    secondFrag.setText(getIntent().getExtras().getString("secondPlayer"));
    thirdFrag.setText(getIntent().getExtras().getString("thirdPlayer"));
    fourthFrag.setText(getIntent().getExtras().getString("fourthPlayer"));

    firstFrag.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            swipeFragments(new FirstFragment());
        }
    });
    secondFrag.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            swipeFragments(new SecondFragment());
            SharedPreferences preferences = getSharedPreferences("settings",MODE_PRIVATE);
            SharedPreferences.Editor editor = preferences.edit();

            editor.putString("value",secondFragment._screen.getText().toString());

            String last = preferences.getString("value","0");
            secondFragment._screen.setText(last);

        }
    });
    thirdFrag.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            swipeFragments(new ThirdFragment());
        }
    });
    fourthFrag.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            swipeFragments(new FourthFragment());
        }
    });

}

public void swipeFragments(Fragment fragment) {
    getSupportFragmentManager().beginTransaction().add(R.id.container,fragment).commit();


}
我希望在按下按钮移动到其他片段之前保存片段状态,并在按下前一个片段按钮时保留保存的状态

public final class MyFragment extends Fragment {
    private TextView vstup;
    private Bundle savedState = null;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.whatever, null);
        vstup = (TextView)v.findViewById(R.id.whatever);

        /* (...) */

        /* If the Fragment was destroyed inbetween (screen rotation), we need to recover the savedState first */
        /* However, if it was not, it stays in the instance from the last onDestroyView() and we don't want to overwrite it */
        if(savedInstanceState != null && savedState == null) {
            savedState = savedInstanceState.getBundle(App.STAV);
        }
        if(savedState != null) {
            vstup.setText(savedState.getCharSequence(App.VSTUP));
        }
        savedState = null;

        return v;
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        savedState = saveState(); /* vstup defined here for sure */
        vstup = null;
    }

    private Bundle saveState() { /* called either from onDestroyView() or onSaveInstanceState() */
        Bundle state = new Bundle();
        state.putCharSequence(App.VSTUP, vstup.getText());
        return state;
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        /* If onDestroyView() is called first, we can use the previously savedState but we can't call saveState() anymore */
        /* If onSaveInstanceState() is called first, we don't have savedState, so we need to call saveState() */
        /* => (?:) operator inevitable! */
        outState.putBundle(App.STAV, (savedState != null) ? savedState : saveState());
    }

    /* (...) */

}