2017-04-27 3 views
0

Ich habe eine Aktivität, die Spinner-Steuerelement in appbar enthält. In HomeActivity verwende ich Fragment, das Standardfragment als Parentoptionsfragment hat, von diesem Fragment gibt es 3 Optionen, um die Fragmente zu ändern, wenn ich ein Fragment aus dem Elternoptionsfragment gewählt habe und den Spinnerwert ändern möchte, dann sollte das Fragment ohne Hinzufügen aktualisiert werden backstack bedeutet, wenn ich back button drücke, dann sollte es parent optionfragment aufrufen, aber wenn ich versuche, dies zu tun, bekomme ich Fehler.wie Fragment von Aktivität Spinner ohne Backstack zu ersetzen

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 mit Spinner Update childfragment ohne Backstack onbackpress von childfragment -> parentoptionfragment

Antwort

1

Toast.makeText (HomeActivity.this "erfrischenden childmapfragment", Toast.LENGTH_SHORT) .show() ersetzen;

  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(); 

mit:

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

Update: auf Ihrem Kind Fragment fügen Sie eine Methode: update() und nennen es:

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

ist es den childmapfragment neu geladen? –

+0

mit diesem geht es zurück zu übergeordneten optionsfragment, aber ich möchte childfragment aktualisieren. –

+0

Wenn Sie Ihr untergeordnetes Fragment aktualisieren möchten, verwenden Sie besser einen Rückruf, wenn sich der Wert Ihres Drehfelds ändert. –

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(); 

     } 

zu aktualisieren Fragment implementieren zurück Stapel in der Aktivität wie dieses

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

hier passieren unterschiedliche Tag-Basis auf verschiedenes Fragmente

Verwandte Themen