当用户点击相应的列表视图项时,我正在尝试创建一个在特定布局中显示大量文本和图像的应用。由于我需要特定的.xml布局用于单独的章节,我只希望片段的布局更改为相应的章节。
谷歌搜索告诉我,我可以用片段做到这一点,但据我所知,我需要为我想要实现的每个章节单独的片段类和.xml布局。有2或3章可以完成,但有更多的章节将会被我想到,只保留两个片段(一个带有列表视图,一个带章节文本),但动态更改如果用户单击列表视图中的项目,则布局第二个片段。
这可以用这样的代码完成(只是大声思考)吗?
Int[] layouts = {
{R.layout.chapter1, R.layout.chapter2, R.layout.chapter3}
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
index = intent.getIntent("index", 0);
return inflater.inflate(layouts[index], container, false);
}
还是有另一种方法可以实现这个目标吗?
答案 0 :(得分:4)
它们核心的碎片是包含Views状态的View包装器。您可以将它们用于资源处理等其他目的,但大多数情况下它们只是活动状态的一部分。除非每章都有自己独特的需要保留的状态,否则每一章都有一个片段,这很可能不是一个好主意。但是,如果视图是静态的,那么您只需要一个片段。
在这种情况下,你只需要这样的方法:
public void setChapter(int chapter)
{
Context ctx = getActivity();
if(ctx == null) {
// detached from Activity, so bail.
return;
}
if(chapter > layouts.length) {
return;
}
ViewGroup container = (ViewGroup) getView().findViewById(R.id.chapter_container);
container.removeAllViews();
View chapterInflater = LayoutInflater.from(ctx).inflate(layouts[chapter], container);
}
因此,这将消除当前容器中的所有视图,为新容器充气,并将其放入容器中(很可能是简单的FrameLayout)。
如果要在特定点打开片段,原始问题中的代码可用于初始化片段。只有在“构建”或“创建”项目时才会调用onCreate_()
方法。但是,onCreateView()
不会被再次调用,因此您需要一种方法来在布局后更改布局。