Thi*_*93H 4 android listview android-fragments
我正在尝试制作一个应用程序,当用户单击相应的列表视图项时,该应用程序以特定布局显示大量文本和图像。由于我想要单独的“章节”的特定 .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);
}
Run Code Online (Sandbox Code Playgroud)
还是有另一种方法来实现这一目标?
片段的核心是包含视图状态的视图包装器。您可以将它们用于其他目的,例如资源处理,但大多数情况下它们只是 Activity 状态的片段。除非每个章节都有自己独特的状态需要保留,否则为每个章节都设置一个 Fragment 很可能不是一个好主意。但是,如果视图是静态的,那么您真正需要的只是一个片段。
在这种情况下,您只需要有一个这样的方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
因此,这将清除当前容器中的所有视图,扩充一个新视图,并将其放入容器中(很可能是一个简单的 FrameLayout)。
如果您想在某个时刻打开它,可以使用原始问题中的代码来初始化 Fragment。onCreate_()仅在“构建”或“创建”项目时调用方法。onCreateView()但是不会再次调用,因此您需要一种方法来在设置后更改布局。
| 归档时间: |
|
| 查看次数: |
4385 次 |
| 最近记录: |