我在活动中有三个片段。此活动内有三个文本视图。我在每个片段中都有三个API调用。我需要在三个片段中创建的ArrayList计数。我尝试在活动中进行API调用,并尝试从那里找出ArrayList并将其传递给片段。但我不知道如何将这种类型的ArrayList(Arraylist数组)传递给片段。我只需要活动中的三个整数值。所以问题是,
1)请给我一种方法,通过实际加载一个片段的视图并加载没有视图的片段的其余部分,将值从三个片段传递给活动。
2)或者给我一种方法将在活动中创建的模型类的ArrayList传递给三个片段。
答案 0 :(得分:1)
1 - 从fragment:
获取Array的大小在这种情况下,您需要获取添加的片段的实例,并从其全局变量中检索所需的值。
片段:
public List<MyObject> myList;
活动:
int size;
MyFragment fragment = (MyFragment)getSupportFragmentManager().findFragmentByTag("myFragmentTag");
if(fragment != null && is fragment.isAdded())
size = fragment.myList.size();
PS:在上述情况下,不要忘记在添加时向片段添加TAG
2 - 将数组传递给片段:
在这种情况下,您需要使Object Serializable,将其作为参数添加到即将添加的片段,然后,当片段添加时,在片段内,检索以前添加的Object
使对象可序列化并将其添加到活动的参数
活动:
public MySerializableObjectList myList;
将数组添加到Activity中的片段:
MyFragment myFragment = new MyFragment();
fragmentManager = getSupportFragmentManager();
Bundle bundle = new Bundle();
bundle.putSerializable("myArrayTag", myList);
myFragment.setArguments(bundle);
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, myFragment,"myFragmentTag").commit();
在片段中:
public MySerializableObjectList myList;
if(getArguments != null)
myList = (MySerializableObjectList)getArguments().getSerializable("myArrayTag");
List<MySerializableObject> myListObject;
if(myList != null)
myListObject = myList.getMySerializableObjectList();
答案 1 :(得分:1)
putParcelableArrayList和getParcelableArrayList通过Fragment参数中的Bundle。
答案 2 :(得分:1)
按照此步骤执行此操作 1)获取活动onCreate方法中的List。 2)在片段中,创建一个变量和一个从活动中接收对象的方法。
public class FormFragment extends Fragment {
List<Object> data;
public FormFragment() {
// Required empty public constructor
}
public void initFragment(List<Object> data){
this.data = data
}
}
3)创建片段后,使用此方法将信息传递给片段
public class Activity extends AppCompat{
List<Object> data = //Query your data here
/....
FormFragment fragment = new FormFragment()
fragment.init(data)
}
就是这样,您可以通过这种方式传递信息并顺利运行,同时,您可以在祝福时使用活动中的数据。