2017-04-27 7 views
0

나는 appbar에 스피너 컨트롤을 포함하는 하나의 액티비티를 가지고 있습니다. homeActivity에서 내가 parentoptionfragment로 기본 조각을 가지고 조각을 사용하고 있어요, 그 fragmentation에서 3 가지 옵션이 있습니다. 만약 parentoption fragment에서 하나의 fragment를 선택했고, spinner 값을 바꾸고 싶다면, 조각을 추가하지 않고 업데이트해야합니다. backstack에 나는 다시 버튼을 누른 다음 부모 optionfragment를 호출해야한다는 것을 의미하지만 내가 그렇게하려고 할 때 오류가 발생했습니다. 가기 backstack없이 회 업데이트 childfragment를 사용backstack없이 액티비티 스피너에서 fragment를 대체하는 방법

public void GetChildData(String token) { 
    ParentOptionsFragment fragment =new ParentOptionsFragment(); 
      FragmentManager fm = getSupportFragmentManager(); 
      FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_container, fragment); 
      fragmentTransaction.commit(); 
    } 

@Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      tv_childClassname.setText(classNameArr[position]); 
      tv_childSchoolName.setText(schoolNameArr[position]); 

      Fragment f = getSupportFragmentManager().findFragmentById(R.id.fragment_container); 
      if (f instanceof ChildMapFragment){ 
       Toast.makeText(HomeActivity.this, "refreshing childmapfragment", Toast.LENGTH_SHORT).show(); 

       ChildMapFragment fragment = new ChildMapFragment(); 
       FragmentManager fragmentManager = getSupportFragmentManager(); 
       fragmentManager.popBackStackImmediate (fragment.getClass().getName(), 0); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, fragment); 
       fragmentTransaction.commit(); 
      }else if(f instanceof ParentOptionsFragment){ 
       Toast.makeText(HomeActivity.this, "spinner changed from ParentOptionsFragment", Toast.LENGTH_SHORT).show(); 

      } 
     } 

parentoptionfragment.java

public class ParentOptionsFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_parent_options, container, false); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     final ImageView img1=(ImageView)view.findViewById(R.id.imageView); 
     ImageView img2=(ImageView)view.findViewById(R.id.imageView2); 
     ImageView img3=(ImageView)view.findViewById(R.id.img_transport); 

     img3.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       ChildMapFragment fragment = new ChildMapFragment(); 
       FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.fragment_container, fragment); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 
      } 
     }); 
     /*final ViewTreeObserver vto = img1.getViewTreeObserver(); 
     vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      public boolean onPreDraw() { 
       int x; 
       img1.getViewTreeObserver().removeOnPreDrawListener(this); 
       x = img1.getMeasuredWidth(); 
       img1.setLayoutParams(new LinearLayout.LayoutParams(x,x)); 
       return true; 
      } 
     });*/ 
    } 
} 

childfragment.java

public class ChildFragment extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_child_map, container, false); 
    } 
} 

homeActivity ---> defaultfragment-- parentoptionfragment parentoptiofragment ---> childfragment childfragment의 onbackpress -> parentoptionfragment

답변

1

Toast.makeText (HomeActivity.this, "상쾌한 childmapfragment", Toast.LENGTH_SHORT를) .show 대체();

  ChildMapFragment fragment = new ChildMapFragment(); 
      FragmentManager fragmentManager = getSupportFragmentManager(); 
      fragmentManager.popBackStackImmediate (fragment.getClass().getName(), 0); 
      FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
      fragmentTransaction.replace(R.id.fragment_container, fragment); 
      fragmentTransaction.commit(); 

과 :

FragmentManager fragmentManager = getSupportFragmentManager(); 
      fragmentManager.popBackStack() 

업데이트 : 자녀 조각에 는 방법 추가 : update()을하고 전화 : 조각

FragmentManager fragmentManager = getSupportFragmentManager(); 
      Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container) 
    if(fragment isInstanceOf ChildMapFragment){ 
    ((ChildMapFragment)fragment).update() //call your update method here 
    } 
+0

자식 아이콘 조각을 새로 고칩니다. –

+0

이것을 사용하여 부모 optionfragment로 돌아가지만 childfragment를 업데이트하려고합니다. –

+0

자식 조각을 새로 고치려면 회 전자 값이 변경 될 때마다 콜백을 사용하는 것이 좋습니다 –

0
FragmentManager fragmentManager = getSupportFragmentManager(); 
     // String f_name=fragment.getClass().getName(); 
     if (!fragmentManager.popBackStackImmediate(tag, 0)) { 

      FragmentTransaction ft = fragmentManager.beginTransaction(); 
      ft.replace(R.id.content_frame, fragment, tag); 
      ft.addToBackStack(tag); 
      ft.commit(); 

     } 

새로 고침하는 활동에 스택을 다시 구현 좋아요

@Override 
    public void onBackStackChanged() { 
     FragmentManager fragmentManager = getSupportFragmentManager(); 
     Fragment fr = fragmentManager.findFragmentById(R.id.content_frame); 
     if (fr != null) { 
      fr.onResume(); 
     } 
    } 

다른 단편에 다른 태그 기반을 전달합니다.