Android 将列表从一个活动传递到另一个活动
如何将像Android 将列表从一个活动传递到另一个活动,android,listview,android-intent,arraylist,Android,Listview,Android Intent,Arraylist,如何将像ArrayList这样的集合从一个活动传递到另一个活动,就像我们使用putExtra方法传递字符串,int一样 当我想将列表从一个活动传递到另一个活动时,有人能帮我吗?如果E类型为可序列化,您可以用同样的方式传递数组列表 您可以调用Intent的putExtra(字符串名称,可序列化值)进行存储,并调用getSerializableExtra(字符串名称)进行检索 例如: ArrayList<String> myList = new ArrayList<String&g
ArrayList
这样的集合从一个活动
传递到另一个活动,就像我们使用putExtra方法传递字符串
,int
一样
当我想将列表
从一个活动
传递到另一个活动时,有人能帮我吗?如果E
类型为可序列化
,您可以用同样的方式传递数组列表
您可以调用Intent
的putExtra(字符串名称,可序列化值)
进行存储,并调用getSerializableExtra(字符串名称)
进行检索
例如:
ArrayList<String> myList = new ArrayList<String>();
intent.putExtra("mylist", myList);
ArrayList myList=new ArrayList();
intent.putExtra(“mylist”,mylist);
在其他活动中:
ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");
List<String> myList...
Bundle b = getIntent().getExtras();
if (b != null) {
myList = bundle.getStringArrayList("KEY");
}
ArrayList myList=(ArrayList)getIntent().getSerializableExtra(“myList”);
请注意,序列化可能会导致性能问题:它需要时间,并且会分配很多对象(因此,必须进行垃圾收集)。使用putExtra
将值传递给intent。使用getSerializableExtra
方法检索数据
像这样
活动A:
ArrayList<String> list = new ArrayList<String>();
intent.putExtra("arraylist", list);
startActivity(intent);
ArrayList list=new ArrayList();
intent.putExtra(“arraylist”,列表);
星触觉(意向);
活动B:
ArrayList<String> list = getIntent().getSerializableExtra("arraylist");
ArrayList list=getIntent().getSerializableExtra(“ArrayList”);
要将ArrayList从一个活动传递到另一个活动,应该包括
intent.putStringArrayListExtra(KEY, list); //where list is ArrayList which you want to pass
在启动活动之前。要在另一个活动中获取ArrayList,请包括
Bundle bundle = getIntent().getExtras();
if (bundle != null) {
temp = bundle.getStringArrayList(KEY); // declare temp as ArrayList
}
您将能够通过此操作通过ArrayList。希望这对您有所帮助。我尝试了所有建议的技术,但都没有成功,并阻止了我的应用程序工作,最后我成功了。这就是我是怎么做到的。。。
在主要活动中,我这样做:
List<String> myList...;
Intent intent = new Intent...;
Bundle b=new Bundle();
b.putStringArrayList("KEY",(ArrayList<String>)myList);
intent_deviceList.putExtras(b);
....startActivity(intent);
List myList。。。;
意图=新意图。。。;
Bundle b=新Bundle();
b、 putStringArrayList(“KEY”,(ArrayList)myList);
意图(b);;
..开始触觉(意图);
要获取新活动中的数据,请执行以下操作:
ArrayList<String> myList = (ArrayList<String>) getIntent().getSerializableExtra("mylist");
List<String> myList...
Bundle b = getIntent().getExtras();
if (b != null) {
myList = bundle.getStringArrayList("KEY");
}
列出我的列表。。。
Bundle b=getIntent().getExtras();
如果(b!=null){
myList=bundle.getStringArrayList(“键”);
}
我希望这将帮助某人…首先,您需要创建一个Parcelable对象类,请参见示例
public class Student implements Parcelable {
int id;
String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int arg1) {
// TODO Auto-generated method stub
dest.writeInt(id);
dest.writeString(name);
}
public Student(Parcel in) {
id = in.readInt();
name = in.readString();
}
public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
被调用活动的代码
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_秒);
Bundle Bundle=getIntent().getExtras();
ArrayList ArrayList=bundle.getParcelableArrayList(“mylist”);
}
+1提到E必须是可序列化的,其他人似乎忘记了提到这一点。值得一提的是,List
接口不扩展Serializable
,因此如果您的集合是由接口声明的,您必须首先将其强制转换为特定的实现。注意:-intent.putExtra(“mylist”,(可序列化)myList);为我工作!@mindbroastermir不客气,不,它也为自定义类工作List@iamkdblue您正在编写,我也说过同样的话,可能是我的评论表述不正确。我是说,接受的asnwer不适用于自定义类列表,还需要指出的是,自定义类必须实现可序列化,否则它将无法实现不起作用。谢谢发布前请进行搜索;您好,RajaReddy,我将数组列表a活动传递给B活动。B活动我已更改了一个值,并返回到一个活动值不变。请帮助我返回B活动时,您必须将数据从B传递到a…或将该数组作为全局数组并从B活动更新。在我的cas中e我可以选择进行C活动。在这种情况下,我如何更新arraylist?然后在应用程序类中将其设置为全局…并在任何你想使用的地方更新和使用。感谢你的提示。如果可能,请给我你的邮件id,我将通过电子邮件询问疑问。工作得很有魅力,一小时后我收到了这个,非常感谢老兄。最好使用seria那么这只蜥蜴就可以了,但它对某人有好处+1@HarishReddy您能解释一下为什么使用serializable更好吗?我认为Parcelable在性能上优于serializable。因为它是基于订单工作的,因为值在writeToParcel
中给出。是否有任何机制可以基于键从Parcel
对象获取值?。例如,如果在课堂上我们有多个字符串字段,那么我们如何才能知道我们从学生中的包裹中得到的是哪个字符串
@Haristhedy:使用Serializable可以实现更简单的实现,但使用Parcelable可以提供更好的性能。哪一个更好取决于具体情况:如果Serializable在您的用例中提供的性能足够,那么您应该选择更简单的方法。但是如果在您的用例中使用Serializable速度太慢,您应该尝试使用Parcelable。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Bundle bundle = getIntent().getExtras();
ArrayList<Student> arraylist = bundle.getParcelableArrayList("mylist");
}