通过子片段访问父片段

时间:2017-03-09 12:50:05

标签: android android-layout android-fragments

这是我的子片段以及如何从这个片段访问我的父片段请帮我修复它

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

这是我在运行项目时的错误

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

这是我的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;}}

5 个答案:

答案 0 :(得分:31)

您可以通过以下方式获取家长Fragment的参考资料:

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

我在ViewPager中使用过它。如果您有其他要求,InterfaceEventBus是一般要求中的两个。

答案 1 :(得分:2)

最新答案,但是有一种非常简单的方法来访问片段的父片段:

科特林

(parentFragment as YourParentFragment).parentFragmentMethod()

Java

((YourParentFragment) getParentFragment()).parentFragmentMethod();

答案 2 :(得分:2)

从子片段访问父片段方法

((YourParentFragmentName) getParentFragment()).yourParentFragmentMethod();

从父片段访问子片段方法

YourChildFragmentName fragment = (YourChildFragmentName) getChildFragmentManager().getFragments().get(positionOfYourChildFragment);
fragment.yourChildFragmentMethod();

答案 3 :(得分:0)

上述方法不适用于我(API 26)。我在这里找到了新的解决方案:

equals

答案 4 :(得分:0)

如果您使用的是Kotlin,则可以直接使用parentFragment进行访问。 像这样

parentFragment?.viewPager?.isUserInputEnabled = false
相关问题