web-dev-qa-db-fra.com

accéder au fragment parent par fragment enfant

c'est mon fragment enfant et comment accéder à mon fragment parent à partir de ce fragment, aidez-moi à le réparer 

public class Profilefragmant extends Fragment {
public Profilefragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.profile_layout, container, false);

    TextView VE = (TextView) rootView.findViewById(R.id.profile_view_enquiry);
    VE.setOnClickListener(new View.OnClickListener(){
        public void onClick (View view){
            Fragment fragment = null;

            fragment = new Enquiryfragment();
            replaceFragment(fragment);
        }
    });



    return rootView;
}
public void replaceFragment(Fragment someFragment) {
    Android.support.v4.app.FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.containerView, someFragment);
    transaction.addToBackStack(null);
    transaction.commit();
}
}

c'est mon erreur lors de l'exécution du projet

 Java.lang.IllegalArgumentException: No view found for id 0x7f0c0099 (com.knrmarine.knr:id/containerView) for fragment EnquiryActivity{3754711 #2 id=0x7f0c0099} 

Ceci est mon code Enquiryfragment:

public class Enquiryfragmant extends Fragment {
public Enquiryfragment(){}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.enquiry_layout, container, false);
return rootView;}}
7
Selva

Vous pouvez obtenir la référence d'un parent Fragment en:

ParentFragment parentFrag = ((ParentFragment)ChildFragment.this.getParentFragment());
parentFrag.someMethod();

Je l'ai utilisé dans mon ViewPager. Si vous avez d'autres exigences, Interface ou EventBus sont deux des plus générales.

25
Kevin Murvie

Réponse tardive, mais il existe un moyen assez simple d'accéder au fragment parent d'un fragment:

Kotlin

(parentFragment as YourParentFragment).parentFragmentMethod()

Java

((YourParentFragment) getParentFragment()).parentFragmentMethod();
1
ArteFact

La méthode ci-dessus n'a pas fonctionné pour moi (API 26). J'ai découvert une nouvelle solution ici:

Fragment fragment = getActivity().getSupportFragmentManager().findFragmentByTag("MyFragment");

if(fragment != null && fragment instanceof MyFragment)
     ((MyFragment) fragment).someMethod();
else
     Log.e(TAG, "cannot change tab its null...");
0
Alp Altunel