在ChildFragment中创建BaseFragment并扩展此Fragment

Moh*_*med 4 android android-fragments

我不知道这是否是重复的问题,但我没有找到任何解决方案.

问题是,有一个屏幕在所有屏幕上都有类似的视图,屏幕是碎片.

所以,我想创建一个基本片段,并希望在所有子片段中扩展此基本片段.

我在google上找到了演示示例,但我找不到任何解决方案.

我不知道从哪里开始.

请帮我.

我找到了这个链接,但不太清楚:

  1. 片段继承Android

  2. 我什么时候需要基本活动和基础片段?

BaseFragment.java

public class BaseFragment extends Fragment {

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

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

    return inflater.inflate(R.layout.fragment_base, container, false);
  }
}
Run Code Online (Sandbox Code Playgroud)

ChildFragment.Java

public class ChildFragment extends BaseFragment{

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_child, container, false);
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,fragment_child布局中有一个TextView.当我运行应用程序时显示,但fragment_base中有另外两个视图,但没有显示...

在此输入图像描述

Roh*_*ngh 10

抽象类方法?

我明白你在做什么(继承).但正如@hobokent指出的那样,仅通过继承BaseClass将不会在BaseClass Layout之上包含您的childView布局.有很多方法可以解决这个问题

让我们来看看这个解决方案.

  • 创建一个扩展Fragment类的抽象类(这将是BaseClass).

  • 制作一个将返回布局的抽象方法.

  • 在ChildClass中为您的抽象方法提供实现.

这是代码片段.

BaseClass的

public abstract class BasicFragment extends Fragment {

  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
  }

  public View onCreateView(LayoutInflater inflater,ViewGroup parent, Bundle savedInstanseState)
   {
      View view = provideYourFragmentView(inflater,parent,savedInstanseState);
      return view;
   }

   public abstract View provideYourFragmentView(LayoutInflater inflater,ViewGroup parent, Bundle savedInstanceState);

}
Run Code Online (Sandbox Code Playgroud)

ChildClass

public class ImageFragment extends BasicFragment{

  @Override
  public View provideYourFragmentView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.image_fragment,parent,false);

    //Now specific components here (you can initialize Buttons etc)

    return view;
   }


}
Run Code Online (Sandbox Code Playgroud)

对于您的特定要求,如果您希望在子类布局中显示相同的布局.您可以创建一个返回布局的方法,也可以在子布局中为BaseClass Layout创建占位符,并使用child.add(base_layout)在childLayout中添加BaseClass布局.这又是另一种设计解决方案.
您还可以在Activity布局中放置一个公共布局,并在片段的Activity占位符中添加片段.有很多可能的解决方案.

我没有任何特定于您的要求的代码,但这里是我为TabLayout实现此方法的示例,其中每个选项卡是具有不同布局的不同片段.
Github完整代码示例.