2017-09-30 3 views
0

J'ai Android app qui ont l'activité principale et trois fragment 1-home 2-visa 3-trans, je veux cliquer sur le bouton dans le fragment de la maison pour commencer visa fragment, j'ai essayé plus de choses dans le fragment de la maison qui ont le bouton et voici mon code pour la maison après avoir essayé d'ajouter onclicklistner dans onCreatView:Comment démarrer un autre fragment en utilisant le bouton à l'intérieur du fragment

package com.example.ghoniem.myfrag.Fragments; 

import android.content.Context; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.TextView; 

    import com.example.ghoniem.myfrag.R; 


    public class Home extends Fragment { 


     private static final String ARG_PARAM1 = "param1"; 
     private static final String ARG_PARAM2 = "param2"; 


     // TODO: Rename and change types of parameters 
     private String mParam1; 
     private String mParam2; 

     private OnFragmentInteractionListener mListener; 

     public Home() { 
      // Required empty public constructor 
     } 


     public static Home newInstance(String param1, String param2) { 
      Home fragment = new Home(); 
      Bundle args = new Bundle(); 
      args.putString(ARG_PARAM1, param1); 
      args.putString(ARG_PARAM2, param2); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 



      if (getArguments() != null) { 
       mParam1 = getArguments().getString(ARG_PARAM1); 
       mParam2 = getArguments().getString(ARG_PARAM2); 
      } 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
      Button button=rootView.findViewById(R.id.text_View88); 
      button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        Visa visa = new Visa(); 
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
        fragmentTransaction.replace(R.id.visaaa, visa); 
        fragmentTransaction.commit(); 
       } 
      }); 


      // Inflate the layout for this fragment 
      return inflater.inflate(R.layout.fragment_home, container, false); 
     } 




     // TODO: Rename method, update argument and hook method into UI event 
     public void onButtonPressed(Uri uri) { 
      if (mListener != null) { 
       mListener.onFragmentInteraction(uri); 
      } 
     } 

     @Override 
     public void onAttach(Context context) { 
      super.onAttach(context); 

     } 

     @Override 
     public void onDetach() { 
      super.onDetach(); 
      mListener = null; 
     } 


     public interface OnFragmentInteractionListener { 
      // TODO: Update argument type and name 
      void onFragmentInteraction(Uri uri); 
     } 


    } 
Code

pour le fragment de visa:

package com.example.ghoniem.mfrag.Fragments; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.example.ghoniem.myfrag.R; 


public class Visa extends Fragment { 

    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

    // TODO: Rename and change types of parameters 
    private String mParam1; 
    private String mParam2; 

    private OnFragmentInteractionListener mListener; 

    public Visa() { 

    } 


    public static Visa newInstance(String param1, String param2) { 
     Visa fragment = new Visa(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
    } 

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

     return inflater.inflate(R.layout.fragment_visa, container, false); 
    } 


    public void onButtonPressed(Uri uri) { 
     if (mListener != null) { 
      mListener.onFragmentInteraction(uri); 
     } 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 


    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mListener = null; 
    } 


    public interface OnFragmentInteractionListener { 
     // TODO: Update argument type and name 
     void onFragmentInteraction(Uri uri); 
    } 
} 

et ce xml pour fragment_visa

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:id="@+id/visaaa" 
    android:layout_height="match_parent" 
    tools:context="com.example.ghoniem.myfuckenfrag.Fragments.Visa"> 

    <TextView 
     android:textColor="@color/colorPrimary" 
     android:textAppearance="@style/Base.TextAppearance.AppCompat.Large" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="text 2"/> 

    <ImageView 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:layout_gravity="center" 
     android:alpha="0.3" 
     android:src="@drawable/ic_photo_library_black_24dp" /> 

</FrameLayout> 
+0

Vous devez utiliser 'visa Visa = n ew Visa(). newInstance ("param1", "param2"); 'au lieu de' Visa visa = new Visa(); 'En raison de la méthode de votre constructeur est vide. –

+0

Je ne sais pas ce que je devrais taper? –

+0

Vous changez le code 'Visa visa = new Visa();' dans votre fragment d'origine. –

Répondre

0
replace ur onCreateView() in Home Fragment from it 
@Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_home, container, false); 
      Button button=rootView.findViewById(R.id.text_View88); 
      button.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        Visa visa = new Visa(); 
        FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
        fragmentTransaction.replace(R.id.visaaa, visa); 
        fragmentTransaction.commit(); 
       } 
      }); 


      // Inflate the layout for this fragment 
      return rootView; 
     } 
+0

cela ne fonctionne pas –

0

la meilleure pratique consiste à définir un rappel dans l'activité qui est appelée à partir de fragment 1 lorsque le bouton est cliqué, cet appel doit revenir remplacer le fragment

+0

comment puis-je le faire –

+0

Cochez cette http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity – ammcom

0

Essayez ceci:

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Visa fragment = new Visa(); 
       replaceFragment(fragment); 
      } 
     }); 

public void replaceFragment(Fragment someFragment) { 
    FragmentTransaction transaction = getActivity().getFragmentManager().beginTransaction(); 
    transaction.replace(R.id.visaaa, someFragment); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 
+0

le code est incorrect –

+0

J'ai corrigé "Visa fragment = new Visa(); " , essayez-le maintenant, sinon s'il vous plaît laissez-moi savoir l'erreur. Notez que "replaceFragment" est une fonction séparée, donc mettez-la en dehors de la fonction "onCreateView()". –

+0

j'ai essayé cela et j'ai trouvé cette erreur: Erreur: (75, 94) erreur: types incompatibles: android.app.FragmentTransaction ne peut pas être converti en android.support.v4.app.FragmentTransaction –

0

J'ai essayé et travaillé pour moi

Button button=rootView.findViewById(R.id.text_View88); 

     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       FragmentManager fragmentManager=getFragmentManager(); 
       FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction(); 
       Visa visa=new Visa(); 
       fragmentTransaction.replace(R.id.frame,visa); 
       fragmentTransaction.commit();} 
    });