私は3つを持っていますFragments
。各ボタンをクリックすると、対応するFragment
がロードされます。もう一度ボタンをクリックしようとすると、新しいFragment
がロードされて再作成されますが、新しいFragment
を作成する代わりに、既存のバックスタックFragment
を表示する必要があります。フラグメントバックスタックandroid
コード:
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Frag1 frag1;
private Frag2 frag2;
private Frag3 frag3;
Button one,two,three;
FragmentTransaction fragmentTransaction;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
registerViewComponent();
registerClick();
}
private void registerClick() {
one.setOnClickListener(this);
two.setOnClickListener(this);
three.setOnClickListener(this);
}
private void registerViewComponent() {
one=(Button)findViewById(R.id.one);
two=(Button)findViewById(R.id.two);
three=(Button)findViewById(R.id.three);
}
@Override
public void onClick(View view) {
switch (view.getId())
{
case R.id.one:
frag1=new Frag1();
frag3=new Frag3();
frag2=new Frag2();
fragmentTransaction=getSupportFragmentManager().beginTransaction();
Fragment fragment2 = getSupportFragmentManager().findFragmentByTag("Frag1");
Log.v("Tag","Tagg::"+fragment2);
if (fragment2 instanceof Frag1){
Log.v("If","IF::"+fragment2);
}
else {
fragmentTransaction.add(R.id.stack_frame,frag1,"Frag1").addToBackStack("Frag1");
fragmentTransaction.commit();
}
break;
case R.id.two:
frag2=new Frag2();
Fragment fragment = getSupportFragmentManager().findFragmentByTag("Frag2");
Log.v("Tag","Tagg::"+fragment);
if (fragment instanceof Frag2){
Log.v("If","IF::"+fragment);
}
else {
fragmentTransaction=getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.stack_frame,frag2,"Frag2").addToBackStack("Frag2");
fragmentTransaction.commit();
}
break;
case R.id.three:
frag3=new Frag3();
Fragment fragment1 = getSupportFragmentManager().findFragmentByTag("Frag3");
Log.v("Tag","Tagg::"+fragment1);
if (fragment1 instanceof Frag3){
Log.v("If","IF::"+fragment1);
}
else {
fragmentTransaction=getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.stack_frame,frag3,"Frag3").addToBackStack("Frag3");
fragmentTransaction.commit();
}
break;
}
}
ボタンクリック時に新しいオブジェクトを作成しないでください。フラグメントに値があるかどうかを確認してください。 –
値を含んでいますか?作成せずにそのフラグメントを再度表示する方法は? –