片段管理和导航(交付应用程序)
Fragment Management and Navigation (Delivery App)
我正在尝试构建一个交付应用程序。我有一个可供选择的产品列表。用户选择产品后,他将进入一系列阶段来定义特定产品的附加功能和选项。
产品列表:
然后,假设有人点击了其中一个产品,我们转到控制器 FragmentActivity:
页面顶部的小计和页面底部的按钮属于片段activity。然后我在中心布局中放置了一组单选按钮。到目前为止一切都很好。单击用于替换片段的按钮引线:
到现在一切都很美好。我可以通过片段访问按钮和小计。但是,如果我按下设备上的后退按钮,它会将我带回到产品列表而不是上一个片段。即使我设法返回到上一个片段,它也会丢失单选按钮选择。
然后下一个片段是产品及其附加值的计算:
当我按下按钮时,我只是在片段中使用 finish() ,它会带我回到产品列表,这是我想要的结果。但是,我需要知道我来自产品列表中的那里,以便我可以将该产品添加到正在为交货订单构建的购物车中。
我在使用片段方面真的很陌生,但我可以很好地传递参数。我正在努力的是通过控制片段的 FragmentActivity 来控制片段的导航。此外,我正在努力保持片段的状态(记住用户输入)。最后,我需要返回到产品列表以及正在构建的该项目的结果,以便我可以将其添加到购物车。
我的方向对吗?我如何实现这些功能(导航、片段状态、使用一些数据返回到之前的 activity,因为我只使用 finish()),非常感谢你们!
您只需将片段添加到返回堆栈中即可在片段之间导航,如下所示:
// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
这样,当您单击后退按钮时,它不会从堆栈中加载前一个 activity,而是加载已添加到后退堆栈中的前一个片段。您可以在此处找到更多详细信息:http://developer.android.com/training/implementing-navigation/temporal.html
对要保存和检索数据的每个片段使用 onSaveInstanceState(Bundle savedInstanceState) 和 onActivityCreated(Bundle savedInstanceState)。然后执行以下操作:
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
//Restore the fragment's state here
String yourString = savedInstanceState.getString("key");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
//save whatever you want into the bundle
savedInstanceState.putString("key", "your_value");
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
您可以将任何您想要的内容保存到捆绑包中。从字符串到 Parcelables 和 Serializables。更多信息在这里:http://developer.android.com/reference/android/os/Bundle.html
我正在尝试构建一个交付应用程序。我有一个可供选择的产品列表。用户选择产品后,他将进入一系列阶段来定义特定产品的附加功能和选项。
产品列表:
然后,假设有人点击了其中一个产品,我们转到控制器 FragmentActivity:
页面顶部的小计和页面底部的按钮属于片段activity。然后我在中心布局中放置了一组单选按钮。到目前为止一切都很好。单击用于替换片段的按钮引线:
到现在一切都很美好。我可以通过片段访问按钮和小计。但是,如果我按下设备上的后退按钮,它会将我带回到产品列表而不是上一个片段。即使我设法返回到上一个片段,它也会丢失单选按钮选择。
然后下一个片段是产品及其附加值的计算:
当我按下按钮时,我只是在片段中使用 finish() ,它会带我回到产品列表,这是我想要的结果。但是,我需要知道我来自产品列表中的那里,以便我可以将该产品添加到正在为交货订单构建的购物车中。
我在使用片段方面真的很陌生,但我可以很好地传递参数。我正在努力的是通过控制片段的 FragmentActivity 来控制片段的导航。此外,我正在努力保持片段的状态(记住用户输入)。最后,我需要返回到产品列表以及正在构建的该项目的结果,以便我可以将其添加到购物车。
我的方向对吗?我如何实现这些功能(导航、片段状态、使用一些数据返回到之前的 activity,因为我只使用 finish()),非常感谢你们!
您只需将片段添加到返回堆栈中即可在片段之间导航,如下所示:
// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
.add(detailFragment, "detail")
// Add this transaction to the back stack
.addToBackStack()
.commit();
这样,当您单击后退按钮时,它不会从堆栈中加载前一个 activity,而是加载已添加到后退堆栈中的前一个片段。您可以在此处找到更多详细信息:http://developer.android.com/training/implementing-navigation/temporal.html
对要保存和检索数据的每个片段使用 onSaveInstanceState(Bundle savedInstanceState) 和 onActivityCreated(Bundle savedInstanceState)。然后执行以下操作:
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (savedInstanceState != null) {
//Restore the fragment's state here
String yourString = savedInstanceState.getString("key");
}
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
//save whatever you want into the bundle
savedInstanceState.putString("key", "your_value");
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
您可以将任何您想要的内容保存到捆绑包中。从字符串到 Parcelables 和 Serializables。更多信息在这里:http://developer.android.com/reference/android/os/Bundle.html