欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Intent — List 数据传递

程序员文章站 2022-06-01 12:45:07
...

总结一下项目中最近常接触到的:

简单的数据类型我就暂时不赘述了 (今后再继续补充)
实际开发中,一般来说跨界面传递List<对象>集合用的最多

1 - 传List<Object> (Bundle配合Serializable)

——1. 先准备一个实体类Person,实现Serializable接口

package com.example.demo;

import java.io.Serializable;

public class Person implements Serializable{
    private String name;
    private int age;
    private String sex;
    
    public Person(String name,int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
    
    public int getAge() {
        return age;
    }
    public String getName() {
        return name;
    }
    public String getSex() {
        return sex;
    }
}

——2.在activitiy_main.xml里放个button,然后在MainActivity里利用Bundle携带Serializable数据(需要把list强制转换);最后由intent调用putExtras把bundle保存在intent中

package com.example.demo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity {

    List<Person> list;
    Button button1;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = new ArrayList<Person>();
        list.add(new Person("鸣人", 17, "男"));
        list.add(new Person("佐助", 18, "男"));
        list.add(new Person("卡卡西", 19, "男"));
        
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Bundle bundle = new Bundle();
                bundle.putSerializable("person", (Serializable) list);
                Intent intent = new Intent(MainActivity.this,SecondActivity.class);
                intent.putExtras(bundle);
                startActivity(intent);
            }
        });
        
    }

}


——3.在SecondActivity的布局文件中简单定义三个TextView用于显示我们拿到的数据;然后我们在SecondActivity里调用getSerializableExtra(key)拿到bundle携带的数据,并强制转换回List<Person>

package com.example.demo;

import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity{

    List<Person> naruto;
    TextView tv1,tv2,tv3;
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_activity);
        naruto =  (List<Person>) getIntent().getSerializableExtra("person");
        String mingren= naruto.get(0).getAge()+"" + naruto.get(0).getName() + naruto.get(0).getSex();
        String zuozhu= naruto.get(1).getAge()+"" + naruto.get(1).getName() + naruto.get(1).getSex();
        String kakaxi= naruto.get(2).getAge()+"" + naruto.get(2).getName() + naruto.get(2).getSex();
        tv1 = (TextView) findViewById(R.id.textView1);
        tv2 = (TextView) findViewById(R.id.textView2);
        tv3 = (TextView) findViewById(R.id.textView3);
        tv1.setText(mingren);
        tv2.setText(zuozhu);
        tv3.setText(kakaxi);
        
    }
}

运行效果就暂时不贴了。亲测成功。