【问题标题】:access parent fragment by child fragment通过子片段访问父片段
【发布时间】:2017-03-09 12:50:04
【问题描述】:

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

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

【问题讨论】:

  • 我假设 EnquiryActivity 是活动,那么为什么要使用片段转换呢?请输入 EnquiryActivity 的代码

标签: android android-layout android-fragments


【解决方案1】:

您可以通过以下方式获取父 Fragment 的参考:

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

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

【讨论】:

  • 谢谢你,它工作正常并且知道一些新事物。
  • 很高兴它帮助了你!这个问题是一年前的问题,有点怀念突然出现在我的通知上lol
  • 是的,完美的答案,我认为这被称为铸造,对吧?
  • 真的,@RamkeshYadav。那部分((ParentFragment)ChildFragment.this.getParentFragment()) 读作:我想要代码所在的子片段的父片段,然后将其转换为ParentFragment。注意getParentFragment() 返回Fragment
  • 哦,这是@ArteFact 帖子的长版。只是为了明确这必须在子片段中使用。如果您知道自己在做什么并想要简短的版本,请改用他们的。基本上切割ChildFragment.this部分
【解决方案2】:

迟到的答案,但有一种非常简单的方法可以访问片段的父片段:

科特林

(parentFragment as YourParentFragment).parentFragmentMethod()

Java

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

【讨论】:

  • 最简单的方法。 :-)
【解决方案3】:

从子片段访问父片段方法

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

从父片段访问子片段方法

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

【讨论】:

    【解决方案4】:

    上述方法对我不起作用(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...");
    

    【讨论】:

      【解决方案5】:

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

      parentFragment?.viewPager?.isUserInputEnabled = false
      

      【讨论】:

        猜你喜欢
        • 2018-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-10
        • 2019-03-17
        相关资源
        最近更新 更多