动态更改片段布局,而不是替换片段Android SDK

时间:2014-02-21 17:05:26

标签: 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);
}

还是有另一种方法可以实现这个目标吗?

1 个答案:

答案 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()不会被再次调用,因此您需要一种方法来在布局后更改布局。