从片段获取数据而不加载视图

时间:2017-08-23 13:38:25

标签: java android android-fragments android-activity arraylist

我在活动中有三个片段。此活动内有三个文本视图。我在每个片段中都有三个API调用。我需要在三个片段中创建的ArrayList计数。我尝试在活动中进行API调用,并尝试从那里找出ArrayList并将其传递给片段。但我不知道如何将这种类型的ArrayList(Arraylist数组)传递给片段。我只需要活动中的三个整数值。所以问题是,

1)请给我一种方法,通过实际加载一个片段的视图并加载没有视图的片段的其余部分,将值从三个片段传递给活动。

2)或者给我一种方法将在活动中创建的模型类的ArrayList传递给三个片段。

3 个答案:

答案 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)
}

就是这样,您可以通过这种方式传递信息并顺利运行,同时,您可以在祝福时使用活动中的数据。