Android片段切换最佳做法

时间:2014-12-30 13:31:09

标签: android android-fragments

我有3步申请^ 1步用户选择他需要的例子: -汽车 -Buildings ...

2步 - 点击项目后需要显示汽车|建筑物或其他的列表; 3步 - 显示项目的详细信息

实施例: 1步 - 汽车 - > 2步 - 马自达someModel - > 3步 - 模型细节

现在..你可以推荐我正确的方法: 在智能手机上所有人都轻松地说,一个片段将被替换为另一个片段 在平板电脑上怎么做: 1步 - 1片段 - 类型列表 - 汽车|建筑物......

2步 - 2片段 - 类型列表和所选项目列表

3步 - 2片段 - 选择

后的项目清单和项目详情

我希望清楚地解释我想要的东西;

我知道的一些方式: 1 - 创建水平线性布局并添加/替换/删除片段 2 - 创建包含2个framelayout(对于每个片段)和SHOW / HIDE第二个片段的布局 ...

1 个答案:

答案 0 :(得分:4)

您可以在活动中使用FrameLayout,并在每个步骤中替换此FrameLayout中的片段。您甚至可以自定义动画。

编辑:对于平板电脑,您可以拥有水平LinearLayout。如果您希望左侧片段(类型列表或项目列表)占据屏幕的1/3,而右侧片段(项目或详细信息列表)占据屏幕的2/3,则可以使用重量LinearLayout的属性。

在第1步中,您的LinearLayout仅包含一个weight为1的FrameLayout。此屏幕将全屏显示。

当您切换到第2步时,您不会替换第一个容器内的片段,只需以编程方式添加一个weight为2的新FrameLayout容器。两个容器都将占用大量的容器。你想要的空间。

要动态设置视图的权重,您必须编辑其LayoutParams:

ViewGroup rightContainer = new FrameLayout(this);
rightContainer.setId(View.generateViewId()); // you need an ID to perform a fragment transaction
// api 17+ only, use static ID or copy/paste the code for lower platform
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 2); // the last param is the weight
rightContainer.setLayoutParams(lp);
linearLayout.addView(rightContainer);
fragmentManager.beginTransaction()
  .add(rightContainer.getId(), ItemListFragment.newInstance(), "ITEM_LIST")
  // add custom transition if needed
  .commit();

当您切换到第3步时,您只需替换第二个容器内的片段以显示详细信息并替换第一个容器内的片段以显示项目列表。

如果您不想重新创建片段并重新使用旧实例,则可以通过标记检索片段(如果已将其添加到带有标记的FragmentManager中)。

ItemListFragment oldFragment = fragmentManager.findFragmentByTag("ITEM_LIST");
DetailFragment detailFragment = DetailFragment.newInstance();
fragmentManager.beginTransaction()
  .replace(leftContainer.getId(), oldFragment, "ITEM_LIST")
  .replace(rightContainer.getId(), detailFragment, "DETAIL")
  .commit();