Android studio - 两个Activity之间传递list数据

前言:平时都是传递int或者string数据,这次需要传递List数据,记录一下方法

最开始是使用Bundle来传递,这种方法网上有很多教程,就不写了。一开始是成功的,确实是可以传递,但是过了几天我再打开的时候,对数据进行了修改后就失败了。于是换了个方法。

参考:Activity之间传递List数据

记录一下方法和示例代码,示例代码是上面链接的文章里的
1、创建实体类Bean,同时Bean要implements Serializable:

package com.example.intentlist;
 
import java.io.Serializable;
 
public class Bean implements Serializable {
	private int id;
	private String name;
	private int age;
 
	public Bean() {
 
	}
 
	public Bean(int id, String name, int age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}
 
	public int getId() {
		return id;
	}
 
	public void setId(int id) {
		this.id = id;
	}
 
	public String getName() {
		return name;
	}
 
	public void setName(String name) {
		this.name = name;
	}
 
	public int getAge() {
		return age;
	}
 
	public void setAge(int age) {
		this.age = age;
	}
 
}

2、要传递的Activity:

package com.example.intentlist;
 
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
 
public class MainActivity extends ActionBarActivity {
	List<Bean> lstBean;
 
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
 
		lstBean = new ArrayList<Bean>();
		Bean bean = new Bean(1, "张三", 12);
		lstBean.add(bean);
		Bean bean1 = new Bean(2, "李四", 13);
		lstBean.add(bean1);
		Bean bean2 = new Bean(3, "王五", 14);
		lstBean.add(bean2);
		Bean bean3 = new Bean(4, "赵六", 15);
		lstBean.add(bean3);
		((Button) findViewById(R.id.btn_next)).setOnClickListener(new OnClickListener() {
 
			@Override
			public void onClick(View arg0) {
				Intent intentPut = new Intent(MainActivity.this, IntentTestActivity.class);
				intentPut.putExtra("lstBean", (Serializable) lstBean);
				startActivity(intentPut);
			}
		});
 
	}
}

3、接收list的Activity:

package com.example.intentlist;
 
import java.util.List;
 
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.widget.TextView;
 
public class IntentTestActivity extends ActionBarActivity {
 
	@SuppressWarnings("unchecked")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_intent_test);
		Intent intentGet = getIntent();
		List<Bean> lstBean = (List<Bean>) intentGet.getSerializableExtra("lstBean");
		String result = "IntentTestActivity" + "\n";
		for (Bean bean : lstBean) {
			result += bean.getId() + "---" + bean.getName() + "---" + bean.getAge() + "\n";
		}
 
		((TextView) findViewById(R.id.tv_result)).setText(result);
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中,页面跳转并传递List数据通常使用两种方式:通过Intent或通过ViewModel和LiveData。 1. **使用Intent传递**: - 创建一个包含List数据的Intent: ```java List<String> dataList = ...; // 假设这是一个String类型的List Intent intent = new Intent(StartingActivity.this, DestinationActivity.class); intent.putExtra("data_key", dataList); ``` - 在目标Activity(DestinationActivity)中接收数据: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Bundle extras = getIntent().getExtras(); if (extras != null) { List<String> dataList = extras.getSerializable("data_key"); // 使用数据列表 } } ``` 2. **使用ViewModel和LiveData**: - 在ViewModel中创建一个LiveData<List<String>>: ```kotlin class DataViewModel : ViewModel() { private val _dataList = MutableLiveData<List<String>>() val dataList: LiveData<List<String>> = _dataList fun setData(dataList: List<String>) { _dataList.value = dataList } } ``` - 在StartingActivity中设置数据并启动新Activity: ```kotlin val viewModel = ViewModelProvider(this).get(DataViewModel::class.java) viewModel.setData(dataList) startActivity(Intent(this, DestinationActivity::class.java)) finish() ``` - 在DestinationActivity中观察LiveData: ```kotlin class DestinationActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ViewModelProvider(this).observe(this, viewModel.dataList) { data -> // 处理接收到的数据列表 } } } ``` **相关问题--:** 1. 如何在Android Studio中使用AndroidX的ViewModel进行数据传递? 2. 使用Intent传递数据时,如何处理空的情况? 3. 如果数据量非常大,使用哪种方式更高效?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值