我有两个片段。 checkNodesFragment 动态创建checkBoxes的ArrayList,然后 ReserveNodesFragment 应该访问checkNodesFragment中检查了哪些。 什么样的存储方法更好用,所以ReserveNodesFragment可以查看checkBox在哪里检查?
搜索后,我发现 SharedPreferences 是一种永久存储数据的方法。 SharedPreferences是否适合通过片段显示数据? 我是android的新手,很抱歉,问题很明显。
答案 0 :(得分:2)
片段之间的通信应通过Activity
完成。
Activity
到Fragment
之间共享数据
创建一个包并使用fragment.setArguments(bundle)
将数据传递给Fragment
。
Fragment
到Activity
之间共享数据
在interface
和fragment
中Activity
实施interface
更多信息:
答案 1 :(得分:0)
如果您希望在运行时跨片段传输数据,只需使用Activity。
每个片段都有方法getActivity()
。它是您片段的一种父级,因此您可以将其用作“桥梁”。不错的解决方案是在片段中定义回调。然后你的Activity可以作为这些回调的注册观察者工作并相应地作出反应,例如听取第一个片段的变化,然后在第二个片段上设置一些东西。
更多细节。
interface
,提供有关更改的信息。选中复选框时,将创建将在片段中调用的方法。onAttach()
方法中检查getActivity()
是interface
的实例interface
使用Android Studio中的片段从模板创建活动时,可以找到很好的示例。
答案 2 :(得分:0)
正如我所提到的,我有两个片段。 checkNodesFragment 动态创建checkBoxes的ArrayList,然后 ReserveNodesFragment 应该访问 checkNodesFragment 中检查了哪些内容。 但我有6个CheckBox的Arraylists,ReserveNodesFragment应该知道:
//The ArrayLists with the checkBoxes
public ArrayList<CheckBox> orbitCheckBoxes = new ArrayList<CheckBox>();
public ArrayList<CheckBox> gridCheckBoxes = new ArrayList<CheckBox>();
public ArrayList<CheckBox> usrpCheckBoxes = new ArrayList<CheckBox>();
public ArrayList<CheckBox> disklessCheckBoxes = new ArrayList<CheckBox>();
public ArrayList<CheckBox> icarusCheckBoxes = new ArrayList<CheckBox>();
public ArrayList<CheckBox> baseStationsCheckBoxes = new ArrayList<CheckBox>();
因此,根据您的建议,我应该将六个参数传递给接口的方法,以便ReserveNodesFragment可以访问六个ArrayLists:
// Container Activity must implement this interface
public interface OnHeadlineSelectedListener {
public void onReserveSelected(ArrayList<CheckBox> orbitCheckBoxes, ArrayList<CheckBox> gridCheckBoxes, ArrayList<CheckBox> usrpCheckBoxes, ArrayList<CheckBox> disklessCheckBoxes,
ArrayList<CheckBox> icarusCheckBoxes, ArrayList<CheckBox> baseStationsCheckBoxes);
}
所以将这么多参数传递给回调方法是否优雅?
此外, checkNodesFragment 是AvailableNodesFragment的嵌套片段。所以它的父母不是一个活动,而是一个片段。
所以app层次结构是这样的:
NitosSchedulerActivity - &gt; AvailableNodesFragment - &GT; CheckAvailableNodesFragment
NitosSchedulerActivity - &gt; ReserveNodesFragment
CheckAvailableNodesFragment是一个嵌套到AvailableNodesFragment的片段。
ReserveNodesFragment由AvailableNodesFragment的Button触发。 因此,没有办法从CheckAvailableNodesFragment触发回调方法 用于传递ArrayLists的ReserveNodesFragment。
因此,到目前为止,我发现使 ReserveNodesFragment 可见的CheckBox的ArrayLists的唯一方法是使ArrayLists全局声明。
但是,使ArrayLists全局化是一个优雅的解决方案吗?