Android 按子片段访问父片段

Android 按子片段访问父片段,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,这是我的子片段,如何从这个片段访问我的父片段请帮助我修复它 public class Profilefragmant extends Fragment { public Profilefragment(){} @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View

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

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} 
这是我的
查询片段
代码:

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

您可以通过以下方式获取父
片段的引用:

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

我在我的ViewPager中使用了这个。如果您有其他要求,
接口
事件总线
是两种通用要求。

上述方法对我不起作用(API 26)。我在这里找到了一个新的解决方案:

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

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

回答较晚,但有一种非常简单的方法可以访问片段的父片段:

Kotlin

(parentFragment as YourParentFragment).parentFragmentMethod()
Java

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

从子片段访问父片段方法

((YourParentFragmentName) getParentFragment()).yourParentFragmentMethod();
YourChildFragmentName fragment = (YourChildFragmentName) getChildFragmentManager().getFragments().get(positionOfYourChildFragment);
fragment.yourChildFragmentMethod();
从父片段访问子片段方法

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

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

parentFragment?.viewPager?.isUserInputEnabled = false

我假设InquiryActivity就是活动,那么为什么要使用片段转换呢?请输入查询代码谢谢,工作正常,了解一些新事物。很高兴它帮助了你!这个问题是一年前的事了,有点怀旧,它突然出现在我的答案上。是的,完美的答案,我想这就是众所周知的演员阵容,对吧?没错,@RamkeshYadav。该部分
((ParentFragment)ChildFragment.this.getParentFragment())
的内容如下:我想要代码所在的子片段的父片段,然后将其转换为
ParentFragment
。请注意,
getParentFragment()
返回
Fragment
。哦,这是@artifact文章的长版本。只是为了说明这必须在子片段中使用。如果你知道你在做什么并且想要简短的版本,用他们的来代替。基本上切割
ChildFragment。这是最简单的方法。:-)