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