gpt4 book ai didi

java - 使用 Parcelable 对象将数据发送到 Fragment 而不是 Activity

转载 作者:行者123 更新时间:2023-11-29 07:47:40 31 4
gpt4 key购买 nike

我想用我创建的 Parcelable 类将数据发送到 Fragment。

我知道这就是您在使用 Activity 时的处理方式(ObjectA 是扩展 Parcelable 的类):

ObjectA obj = new ObjectA();   
// Set values etc.
Intent i = new Intent(this, MyActivity.class);
i.putExtra("com.package.ObjectA", obj);
startActivity(i);

但是由于您不能将 intents 与 Fragment 一起使用,所以我不知道该怎么做。

我什至可以使用 Parcelable 类吗?如果没有,我应该使用什么?有可能吗?

编辑/更新:

我已经根据您的建议进行了更新,但仍然没有得到所有信息。

这是我们用来创建 ListView 的 fragment :

package com.tsjd.HotMeals;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import com.example.tabtest.R;

public class RecipeListViewFragment extends Fragment {

ArrayList<String> titles;
ArrayList<String> descriptions;
ArrayList<String> images;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

RecipeListViewParcer object = getArguments().getParcelable("extraObject");
titles = object.getTitles();
descriptions = object.getDescriptions();
images = object.getImages();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_recipelistview, container,
false);

final ListView listview = (ListView) v.findViewById(R.id.listview);


RecipeListViewAdapter adapter = new RecipeListViewAdapter(
getActivity(), titles);
listview.setAdapter(adapter);

return v;
}

public void onListItemClick(ListView l, View v, int position, long id) {
// do something with the data
}
}

我想将此 ListView 用于不同的用途,因此我希望能够将三个 ArrayList 发送给它。为此,我制作了一个实现 Parcelable 的类,就是这样:

package com.tsjd.HotMeals;

import java.util.ArrayList;

import android.os.Parcel;
import android.os.Parcelable;

public class RecipeListViewParcer implements Parcelable{

private ArrayList<String> titles;
private ArrayList<String> descriptions;
private ArrayList<String> images;

@SuppressWarnings("unchecked")
private RecipeListViewParcer(Parcel in) {
titles = (ArrayList<String>) in.readSerializable();
descriptions = (ArrayList<String>) in.readSerializable();
images = (ArrayList<String>) in.readSerializable();
}

public int describeContents() {
return 0;
}

public ArrayList<String> getTitles()
{
return titles;
}

public void setTitles(ArrayList<String> titles){
this.titles = titles;
}

public ArrayList<String> getDescriptions()
{
return descriptions;
}

public void setDescriptions(ArrayList<String> descriptions){
this.descriptions = descriptions;
}

public ArrayList<String> getImages()
{
return images;
}

public void setImages(ArrayList<String> images){
this.images = images;
}

public void writeToParcel(Parcel out, int flags) {
out.writeSerializable(titles);
out.writeSerializable(descriptions);
out.writeSerializable(images);
}

public static final Parcelable.Creator<RecipeListViewParcer> CREATOR
= new Parcelable.Creator<RecipeListViewParcer>() {
public RecipeListViewParcer createFromParcel(Parcel in) {
return new RecipeListViewParcer(in);
}

public RecipeListViewParcer[] newArray(int size) {
return new RecipeListViewParcer[size];
}
};



}

最后,这是一个使用 ListView 显示喜欢的食谱的 fragment ,这里我想发送三个 ArrayLists,这是目前唯一有错误的代码。我不知道如何为我的 Parcelable 类的构造函数声明我需要的 Parcel,我应该怎么做? (我还没有在我的 ArrayLists 中放入任何东西,但我希望这个想法很清楚)。

package com.tsjd.HotMeals;

import java.util.ArrayList;

import android.os.Bundle;
import android.os.Parcel;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;

public class MyRecipesFragment extends Fragment {


ArrayList<String> titles = new ArrayList<String>();
ArrayList<String> descriptions = new ArrayList<String>();
ArrayList<String> images = new ArrayList<String>();



Parcel in = new Parcel();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = new RecipeListViewFragment();

RecipeListViewParcer obj = new RecipeListViewParcer(in);

obj.setDescriptions(descriptions);
obj.setTitles(titles);
obj.setImages(images);

Bundle bundle = new Bundle();
bundle.putParcelable("extraObject", obj);
fragment.setArguments(bundle);

fragmentTransaction.commit();
}

}

最佳答案

你必须使用 FragmentManager:

在 Activity 中发送 3 个 ArrayLists:

       FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment fragment = new ViewControllerFragment();

ObjectA obj = new ObjectA();
Bundle bundle = new Bundle();
bundle.putStringArrayList("Titles", obj.getTitles());
bundle.putStringArrayList("Descriptions", obj.getDescriptions());
bundle.putStringArrayList("Images", obj.getImages());
fragment.setArguments(bundle);

fragmentTransaction.commit();

获取 fragment 中的对象:

Bundle bundle = getArguments();                    
titles = bundle.getStringArrayList("Titles");
descriptions= bundle.getStringArrayList("Descriptions");
images= bundle.getStringArrayList("Images");

或者尝试其他帖子:Send data from activity to fragment in android

关于java - 使用 Parcelable 对象将数据发送到 Fragment 而不是 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24078307/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com