我不知道这是否是重复的问题,但我没有找到任何解决办法。
问题是,有一个屏幕在所有屏幕中有相似的视图,屏幕是碎片。
所以,我想创建一个基本片段,并在所有子片段中扩展这个基本片段。
我发现在谷歌上,演示的例子,但我没有找到任何解决方案.
我不知道该从何说起。
请帮帮我。
我发现了这个环节但并不是很清楚:
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);
}
}
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);
}
}
现在,fragment_child布局中有一个TextView。当我运行应用程序时会显示该视图,但fragment_base中有两个其他视图,未显示...
8条答案
按热度按时间yiytaume1#
遵循这种简单明了的方法
这就是碱基片段
然后对于子片段
为你的工作制定单独的方法
ppcbkaq52#
最简单和干净的解决方案是保持onCreateView不变,并在其中注入一个函数。但是,您需要片段名称才能工作。因此,需要两个抽象,一个视图创建注入器和一个名称获取器,这样您就得到了一个干净和非常可行的解决方案。我在一个Activity中使用了它,其中有10个可替换的片段:
然后按如下方式使用它:
egmofgnx3#
抽象类方法
我理解你在这里试图做什么(继承)。但是正如@hobokent所指出的,仅仅通过继承BaseClass并不会在BaseClass布局之上包含你的childView布局。有很多方法可以克服这个问题
让我们来看看这个解决方案。
下面是代码片段。
基本类别
子类
对于您的特定需求,如果您希望相同的布局出现在子类布局中。您可以创建一个方法,该方法将返回一个布局,并且可能在您的子类布局中为BaseClass布局创建一个占位符,并使用child.add(base_layout)在childLayout中添加BaseClass布局。这也只是另一种设计解决方案。
您还可以在Activity布局中放置一个通用布局,并在Activity占位符中为片段添加片段。
我没有任何特定于您的需求的代码,但这里是我为TabLayout实现这种方法的示例,其中每个选项卡都是具有不同布局的不同片段。
Github full code sample。
ukxgm1gy4#
我已经实现了这个结构,你可以让你的BaseFragment布局出现在你的ChildFragment布局中。基本上,我已经使用ViewStub来实现这个解决方案。VewStub是一种占位符布局。它将在加载
xml
时创建,然后你可以用指定的视图层次结构替换ViewStub。我将使用自解释变量名来避免额外的解释:)。你可以在GitHub上查看sample project。fragment_core.xml
FragmentCore.class
fragment_child.xml
FragmentChild.class
ig9co6j15#
扩展Fragment不会包含视图,这些视图是从您膨胀的布局中得到的,因此您不会在子Fragment中看到fragment_base中的文本视图。
相反,创建和使用自定义视图/复合视图可能会对您有所帮助,您可以在其他片段中重复使用这些视图。
您可以在此处阅读有关复合视图的内容:
https://medium.com/@Sserra90/android-writing-a-compound-view-1eacbf1957fc
lmvvr0a86#
BaseFragment扩展Fragment类,然后其他Fragment扩展BaseFragment
如果要在中使用其他布局:
这对我有用
希望能帮上忙。
8cdiaqws7#
您可以通过为每个子片段包含一个基本布局来实现这一点。然后,您需要为基本布局中的所有基本视图绑定基本片段中的视图。对于子视图布局,您需要在子片段中绑定它。
这里的步骤:
1.创建基本片段布局(fragment_base.xml):
1.创建基本片段
1.在基本片段中创建一个基本方法来绑定视图。它将被覆盖并在子片段中重用。这里我们使用
bindView()
name:1.通过重用基本布局来创建子布局。可以使用include。它应该类似于(fragment_child.xml):
1.现在,您可以通过扩展基本片段来创建子片段。您需要记住使用并覆盖
bindView()
。因此,您需要创建如下内容:rsaldnfx8#
你可以这样做
碎片