フラグメントサブクラスのonSaveInstanceState(Bundle outState)メソッドを使用してデータを保存しようとしています。フラグメントを再作成する前にデータを保存する方法は?
説明:このクラスのFragmentを拡張するクラスFragmentAを作成します。変数名のカウントを持ちます。ボタンをクリックするとcountの値が変更されます(最初のcount = 0)。countの値も保存します。オリエンテーションの変更(縦から横、またはその逆) 私のMainActivityクラスは、断片的に断片的に読み込みます。
私のコード:
このクラスは、フラグメントを拡張: - ここ
public class FragmentA extends Fragment implements View.OnClickListener {
Button change_After_Click;
int count=0;
Communicator com;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(savedInstanceState!=null){
count=savedInstanceState.getInt("counter",0);
}
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_a_layout, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
System.out.println("onActivityCreated");
com= (Communicator) getActivity();
change_After_Click=(Button)getActivity().findViewById(R.id.textChangeClick);
change_After_Click.setOnClickListener(this);
}
@Override
public void onClick(View view) {
count=count+1;
com.proviedLinkBothFragment("button click "+ count);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("counter",count);
}
}
MainActivityクラスiの動的フラグメントをロードします - あなたは既に場合のフラグメントをチェックする必要がありますonCreate
活動の方法では
public class MainActivity extends AppCompatActivity implements Communicator {
Button btn;
FragmentManager fragmentManager;
FragmentTransaction fragmentTransaction;
FragmentB obj;
FragmentA objA;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
System.out.println("ge low");
fragmentManager=getSupportFragmentManager();
fragmentTransaction=fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.relativeLayout,new FragmentA());
fragmentTransaction.commit();
}
@Override
public void proviedLinkBothFragment(String s) {
FragmentB fb= (FragmentB) fragmentManager.findFragmentById(R.id.relativeLayout);
fb.changeText(s);
}
}
'fragmentTransaction.replace(R.id.relativeLayout、new FragmentA());'毎回新しいフラグメントを配置しています。あなたのセーブ/ロード 'count'は正しく見えますが、フラグメントを置き換えているので表示されません。フラグメントが既に存在するかどうかを確認する必要があります。 – njzk2
@ njzk2私は簡単に理解できるように私にコードを教えてください。私は新しい –