2016-07-18 1 views
0

Je n'ai qu'une activité avec 2 Fragments en son sein. Au démarrage de l'activité, le fragment A sera lancé. Après que l'utilisateur tape dans sth et clique le bouton dirigera vers le fragment B. Donc ce que je veux faire est que par ajoutant une "flèche arrière" sth comme ceci < - dans le coin supérieur gauche.Comment retourner à Fragment précédent en cliquant sur le bouton Précédent (pas sur le bouton Matériel)?

Est-ce que cela a à voir avec FragmentManager.popBackStack()? S'il vous plaît avis! Thx

MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    FragmentManager manager=getSupportFragmentManager(); 
    FragmentTransaction transaction=manager.beginTransaction(); 
    first first=new first(); 
    transaction.add(R.id.top,first); 
    transaction.commit(); 
} 
} 

first.java

public class first extends Fragment implements View.OnClickListener{ 

Button get_button; 
EditText get_input_name; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_first,container,false); 
    get_input_name=(EditText)rootView.findViewById(R.id.input_name); 
    get_button=(Button)rootView.findViewById(R.id.submit); 
    get_button.setOnClickListener(this); 
    return rootView; 
} 

public void onClick(View v){ 

    FragmentManager manager=getFragmentManager(); 
    FragmentTransaction transaction=manager.beginTransaction(); 
    two Two=new two(); 
    Bundle bundle = new Bundle(); 
    bundle.putString("input_name_value",get_input_name.getText().toString()); 
    Two.setArguments(bundle); 
    transaction.replace(R.id.top,Two); 
    transaction.commit(); 

} 
} 

two.java

public class two extends Fragment implements View.OnClickListener { 
TextView get_display_input; 
ImageView get_back_button; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_two, container, false); 
} 

public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 

    get_display_input=(TextView)getActivity().findViewById(R.id.display_input); 
    get_back_button=(ImageView) getActivity().findViewById(R.id.back_button); 
    Bundle bundle = getArguments(); 
    String get_name = bundle.getString("input_name_value"); 
    //int store_get_input=Integer.parseInt(get_name); 
    get_display_input.setText("You have entered "+get_name); 
} 

public void onClick(View v){ 

    // WHAT TO DO HERE IN ORDER TO RETURN TO PREVIOUS Fragment when clicking the button? 

} 
} 

enter image description here

Pour être plus précis, veuillez vous reporter à la capture d'écran.

+0

double possible de [Comment mettre en œuvre onBackPressed() dans fragments Android?] (http: // stackoverflow.com/questions/5448653/how-to-implement-onbackpressed-in-android-fragments) – Bryan

+1

Copie possible de [Android Fragment gérer retour bouton de presse] (http://stackoverflow.com/questions/7992216/android-fragment-handle -back-button-press) – EpicPandaForce

Répondre

3

Vous pouvez le faire en utilisant la méthode popBackStack() de FragmentManager, mis cela à l'intérieur du onClickListener de votre bouton retour:

if (getFragmentManager().getBackStackEntryCount() != 0) { 
    getFragmentManager().popBackStack(); 
} 

Si vous « Re en utilisant la valeur par défaut retour bouton de la barre d'outils par exemple, le bouton d'accueil, vous pouvez le faire en plaçant ce code dans la méthode onOptionsItemSelected() de votre Activity:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == android.R.id.home) { 
     if (getFragmentManager().getBackStackEntryCount() != 0) { 
      getFragmentManager().popBackStack(); 
     } 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

ou, si vous voulez le même comportement sur le matériel appuyez sur la touche à l'époque passer outre la méthode onBackPressed() dans votre Activity classe comme ceci:

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() != 0) { 
     getFragmentManager().popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 
+0

J'ai téléchargé le codage pour référence. Jetez un coup d'oeil s'il vous plait. Cela montre exactement ce que je veux dire. S'il vous plaît aidez-moi à jeter un coup d'oeil. Par exemple, où placer le codage? THX! – gosulove

+0

placer le 'popBackStackCode' c'est-à-dire le premier que j'ai suggéré, dans la méthode' onClick' –

+0

aussi la méthode 'onClick' est implémentée dans le parent' Activity' et non le 'Fragment' –

1

Consultez les documents de formation here - ils devraient vous donner un bon départ.

// Works with either the framework FragmentManager or the 
// support package FragmentManager (getSupportFragmentManager). 
getSupportFragmentManager().beginTransaction() 
          .add(detailFragment, "detail") 
          // Add this transaction to the back stack 
          .addToBackStack() 
          .commit(); 
+0

J'ai téléchargé le codage pour référence. Jetez un coup d'oeil s'il vous plait. Cela montre exactement ce que je veux dire. S'il vous plaît aidez-moi à jeter un coup d'oeil. Par exemple, où placer le codage? THX! – gosulove

1

Vous n'avez besoin que d'une seule ligne de code!

getFragmentManager().popBackStackImmediate(); 
+0

cela ne fonctionne pas. Où dois-je placer ce code? Dans le fragment A ou B ou l'activité avant transaction.commit() ;? – gosulove

+0

onBackPressed(); – johnrao07

+0

J'ai téléchargé le codage pour référence. Jetez un coup d'oeil s'il vous plait. Cela montre exactement ce que je veux dire. S'il vous plaît aidez-moi à jeter un coup d'oeil. Par exemple, où placer le codage? THX! – gosulove

1

Oui, il a à voir avec FragmentManager.popBackStack();

Jetez un coup d'oeil ici, il y a beaucoup de méthodes: https://developer.android.com/reference/android/app/FragmentManager.html#popBackStack

Pour moi, getFragmentManager().popBackStackImmediate(); fait exactement cela.

+0

J'ai téléchargé le codage pour référence. Jetez un coup d'oeil s'il vous plait. Cela montre exactement ce que je veux dire. S'il vous plaît aidez-moi à jeter un coup d'oeil. Par exemple, où placer le codage? THX! – gosulove

1

Dans votre activité pour gérer le bouton matériel arrière:

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0) { 
     getFragmentManager().popBackStack(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

donc pour le bouton du clic:

getFragmentManager().popBackStack(); 
+0

où dois-je placer ce code - getFragmentManager(). PopBackStack(); ? Dans le fragment A ou B ou l'activité avant transaction.commit() ;? et cette question fonctionne seulement en cliquant sur le bouton "Hardware Back"? – gosulove

+0

Il suffit de l'appeler dans un écouteur de clic – EpicPandaForce

+0

J'ai téléchargé le codage pour référence. Jetez un coup d'oeil s'il vous plait. Cela montre exactement ce que je veux dire. S'il vous plaît aidez-moi à jeter un coup d'oeil. Par exemple, où placer le codage? THX! – gosulove