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

Java 从片段中获取数据而不加载视图,java,android,android-fragments,android-activity,arraylist,Java,Android,Android Fragments,Android Activity,Arraylist,我在一个活动中有三个片段。此活动中有三个文本视图。我在每个片段中有三个API调用。我需要在三个片段中创建的ArrayList的计数。我试图在activity中调用API,并试图从中找到ArrayList并将其传递给fragment。但我不知道如何将这种类型的ArrayList(ArrayList数组)传递给fragment。我只需要活动中的三个整数值。所以问题是, 1) 请给我一种方法,通过实际加载一个片段的视图,并加载没有视图的其余片段,将值从三个片段传递给activity 2) 或者给我一种

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

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


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

1-从片段中获取数组的大小:

public List<MyObject> myList;
在本例中,您需要获取所添加片段的实例,并从其全局变量中检索所需的值

片段:

public List<MyObject> myList;
PS:在上述情况下,添加片段时不要忘记向片段添加标记

2-将数组传递给片段:

public List<MyObject> myList;
在这种情况下,您需要使对象可序列化,将其作为参数添加到即将添加的片段中,然后在添加片段时,在片段内检索先前添加的对象

使对象可序列化,并将其添加到活动的参数中

在活动中:

int size;
MyFragment fragment = (MyFragment)getSupportFragmentManager().findFragmentByTag("myFragmentTag");
if(fragment != null && is fragment.isAdded())
    size = fragment.myList.size();
public MySerializableObjectList myList;
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();
将数组添加到活动中的片段:

int size;
MyFragment fragment = (MyFragment)getSupportFragmentManager().findFragmentByTag("myFragmentTag");
if(fragment != null && is fragment.isAdded())
    size = fragment.myList.size();
public MySerializableObjectList myList;
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();
public MySerializableObjectList myList;
if(getArguments!=null)
myList=(MySerializableObjectList)getArguments().getSerializable(“myArrayTag”);
列出myListObject;
如果(myList!=null)
myListObject=myList.getMySerializableObjectList();

片段参数中的putParcelableArrayList和getParcelableArrayList包。

好的,让我们看看。在我看来,最好的方法是查询活动中的信息并传递给片段,这意味着,你提出的第二种方法

要执行此操作,请执行以下步骤 1) 在activity onCreate方法中获取列表。 2) 在片段中,创建从活动接收对象的变量和方法

public class FormFragment extends Fragment {
List<Object> data;
 public FormFragment() {
    // Required empty public constructor
} 
public void initFragment(List<Object> data){
this.data = data
}
}
公共类FormFragment扩展了片段{
列出数据;
public FormFragment(){
//必需的空公共构造函数
} 
公共void initFragment(列表数据){
this.data=数据
}
}
3) 创建片段后,使用此方法将信息传递给片段

public class Activity extends AppCompat{
List<Object> data = //Query your data here  
/....

 FormFragment fragment = new FormFragment()
 fragment.init(data)
}
公共类活动扩展了AppCompat{
List data=//在此处查询您的数据
/....

FormFragment fragment=新的FormFragment() fragment.init(数据) }

也就是说,你可以通过这种方式传递信息,并且工作顺利,你也可以使用活动中的数据

添加一些代码片段,以便人们可以帮助您,,我的代码是保密的,这就是为什么对此感到抱歉,但现在的答案在某种程度上帮助了我,试图解决此问题,并将在我得到它后立即更新谢谢您的回复:)Fragment Fragment=new FormFragment()Fragment.init(数据)//当我键入fragment.initFragment时,这不起作用。它不显示我公开了该方法。哦,是的,让我为您编辑aswer。记住,这是一个例子,你必须改变你的代码。我的模型类实现了parcelable,所以我试着这样做,但有没有什么方法像函数调用或其他@jhon fredy trujillo说的那样,而不是设置putSerializable和getSerializable使用PutParcelable和GetParcelable,它将以同样的方式工作很高兴能提供帮助:)我正在寻找另一种方法,实际上还是谢谢你:)使用了这种方法,@Ricardo的回答更有用,给了我清晰的想法谢谢你Marcos.)没问题,但您应该实现Parcelable而不是serializable是的,我使用Parcelable而不是serializable很高兴您的帮助:)