2017-08-21 6 views
1

Dans mon application, j'ai une instance d'un fragment, ActivityFragment, qui est ajouté dynamiquement lorsqu'un bouton, addActivity, est pressé. Il y a delete_button dans chaque ActivityFragment, et j'ai défini un onClickListener pour ce bouton dans la classe ActivityFragment. Lorsque le delete_button est enfoncé, je souhaite supprimer le fragment de la méthode onClick. Comment est-ce que j'irais faire ceci quand je crée l'objet ActivityFragment et l'ajoute à l'activité dans une méthode en dehors de la classe de fragment? Et quel champ dois-je utiliser pour .remove()?Comment supprimer un fragment de lui-même

Notez que delete_button ne devrait supprimer l'instance du fragment il se trouve.

Voici mon MainActivity.java avec la classe ActivityFragment. Le bouton addActivity est en bas:

import android.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.FragmentActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.TextView; 

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 


    public static class ActivityFragment extends Fragment { 
     // @Nullable is used because the method may return a null value 
     @Nullable 
     @Override 
     public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { 
      final View fragment1 = inflater.inflate(R.layout.activity_fragment, container, false); 

      Button edit_button = (Button) fragment1.findViewById(R.id.edit_button); 
      Button delete_button = (Button) fragment1.findViewById(R.id.delete_button); 

      edit_button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        TextView activityText = (TextView) getView().findViewById(R.id.activity_text); 
        activityText.setText("success"); 
       } 
      }); 

      delete_button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        getFragmentManager().beginTransaction() 
          .remove().commit(); 
       } 
      }); 

      return fragment1; 
     } 
    } 

    public void addActivity(View view) { 
     ActivityFragment myFragment = new ActivityFragment(); 
     getFragmentManager().beginTransaction() 
       .add(R.id.fragment_container, myFragment).commit(); 
    } 

} 

Répondre

3

Vous pouvez supprimer l'instance de fragment comme celui-ci

delete_button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getFragmentManager().beginTransaction() 
        .remove(ActivityFragment.this).commit(); 
     } 
    }); 
+0

Je suis toujours au courant d'Android, donc je ne sais pas exactement ce que fait 'ActivityFragment.this' ou comment cela fonctionne. Pourriez-vous expliquer brièvement ou avez-vous des liens vers des endroits où je peux lire plus à ce sujet? Merci beaucoup! –

+0

'ActivityFragment.this 'vous donne une référence de l'objet' ActivityFragment' et vous l'utilisez pour le supprimer. –

0

Un fragment peut être enlevé en faisant ceci:

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
MyFragment myFragment = new MyFragment(); 
fragmentTransaction.remove(myFragment).commit(); 

Ici myFragment est votre "FRAGMENT" que vous souhaitez supprimer du contexte actuel ou de l'activité en cours.