2017-01-23 2 views
1

У меня есть три Fragments. При каждом нажатии кнопки он загрузит соответствующий номер Fragment. Если я снова попытаюсь щелкнуть по кнопке, он заново создаст новый Fragment и загрузит, но вместо создания нового Fragment мне нужно будет показать существующий back-stack Fragment.Фрагмент Back-stack 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; 
     } 

    } 

enter image description here

+1

Не создавайте новый объект при нажатии кнопки, проверьте, имеет ли значение значение или нет. –

+0

содержит значение, как отображать снова этот фрагмент при щелчке без создания? –

ответ

0
Frag3 frag3;  
Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.frame_main); 
    if (fragment instanceof Frag3) { 
    frag3 = (Frag3) fragment; 
    } else { 
    frag3 = new Frag3(); 
    } 

-------------- ИЛИ -------------- -------

Frag3 frag3 = new Frag3(); 
List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
for(Fragment fragment : fragments){ 
    if(fragment instanceof Frag3){ 
    frag3 = (Frag3)fragment; 
    } 
} 

Затем сделать фрагмент транзакции

fragmentTransaction=getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.add(R.id.stack_frame,frag3,"Frag3").addToBackStack("Frag3"); 
fragmentTransaction.commit(); 
+0

его не отображает фрагмент стека onclick() –

+0

если я нажму кнопку еще раз 1, он должен отобразить фрагмент, не создавая снова –

+0

Создается первый новый экземпляр фрагмента, после чего он проверяет задний стек, если они уже являются экземпляром фрагмента , если он существует, то он заменит новый экземпляр более старым экземпляром и вернет прежнее состояние, если оно не существует, оно вернет u новый экземпляр – user6380431

Смежные вопросы