Android碎片交换最佳实践

Android碎片交换最佳实践,android,android-fragments,Android,Android Fragments,我有三步申请^ 1步用户选择他需要的,例如: -汽车 -建筑物 第2步-点击项目后,需要显示汽车、建筑物或其他物品的列表; 第3步-显示项目的详细信息 例如: 1步-汽车->2步-马自达someModel->3步-车型详情 现在…你能给我推荐一个正确的方法吗 在智能手机上,一个片段将被替换成另一个片段 在平板电脑上如何操作: 1步骤-1片段-类型列表-汽车|建筑 2步骤-2片段-类型列表和所选类型的项目列表 3步骤-2片段-选择后的项目列表和项目详细信息 我希望清楚地解释我想要什么 据我所知:

我有三步申请^ 1步用户选择他需要的,例如: -汽车 -建筑物

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

例如: 1步-汽车->2步-马自达someModel->3步-车型详情

现在…你能给我推荐一个正确的方法吗 在智能手机上,一个片段将被替换成另一个片段 在平板电脑上如何操作: 1步骤-1片段-类型列表-汽车|建筑

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

3步骤-2片段-选择后的项目列表和项目详细信息

我希望清楚地解释我想要什么

据我所知: 1-创建水平线性布局并添加/替换/删除片段 2-创建布局,每个片段包含2个FrameLayout,并显示/隐藏第二个片段

您可以在活动中使用一个框架布局,然后在每个步骤中替换该框架布局中的片段。您甚至可以自定义动画

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

在步骤1中,LinearLayout仅包含权重为1的FrameLayout。这将是全屏的

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

要动态设置视图的权重,必须编辑其布局参数:

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();

您可以在活动中有一个FrameLayout,并为每个步骤替换该FrameLayout中的片段。您甚至可以自定义动画

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

在步骤1中,LinearLayout仅包含权重为1的FrameLayout。这将是全屏的

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

要动态设置视图的权重,必须编辑其布局参数:

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();

对于智能手机,但对于平板电脑,我想展示两个问题:1-如何设置wegith属性程序Maticaly 2-最后一段-从网络获取数据片段,我不想在编辑答案时获取两次数据,以提供更多有关您关注的代码。我尝试这样替换:……replacecontainerId,this.commit;:D感谢您更换智能手机,但对于平板电脑,我想向您展示两个问题:1-如何设置wegith property programmaticaly 2-最后一段-从网络获取数据片段,我不想在编辑答案时获取两次数据,以提供更多有关您所关注问题的代码。我试图这样替换:……replacecontainerId,这个。提交;:D谢谢