2017-01-23 5 views
1

나는 세 개가 있습니다 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; 
     } 

    } 

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

조각의 첫 번째 새 인스턴스가 작성된 후 해당 조각이 이미 인스턴스 인 경우 백 스택을 확인합니다. , 존재하는 경우 새로운 인스턴스를 이전 인스턴스로 대체하고 이전 인스턴스를 반환합니다. 존재하지 않으면 새로운 인스턴스를 반환합니다. – user6380431

관련 문제