通过意图传递ArrayList

我正在尝试使用intent将arrayList传递给另一个活动。 这是第一个活动的代码。

case R.id.editButton: Toast.makeText(this, "edit was clicked", Toast.LENGTH_LONG).show(); Intent intent = new Intent(this, editList.class); intent.putStringArrayListExtra("stock_list", stock_list); startActivity(intent); break; 

这是我尝试在第二个活动中检索列表的地方。 这里有什么不对吗?

 Intent i = new Intent(); //This should be getIntent(); stock_list = new ArrayList<String>(); stock_list = i.getStringArrayListExtra("stock_list"); 

在你的接收意图中,你需要做的是:

 Intent i = getIntent(); stock_list = i.getStringArrayListExtra("stock_list"); 

你拥有它的方式,你创造了一个新的空的意图,没有任何额外的。

如果你只有一个额外的,你可以将其压缩到:

 stock_list = getIntent().getStringArrayListExtra("stock_list"); 

我通过以String的forms传递ArrayList来完成这一项。

  1. 依赖关系build.gradle中添加compile 'com.google.code.gson:gson:2.2.4'

  2. 点击 与Gradle文件同步项目

Cars.java

 public class Cars { public String id, name; } 

FirstActivity.java

当你 传递 ArrayList时

 List<Cars> cars= new ArrayList<Cars>(); cars.add(getCarModel("1", "A")); cars.add(getCarModel("2", "B")); cars.add(getCarModel("3", "C")); cars.add(getCarModel("4", "D")); Gson gson = new Gson(); String jsonCars = gson.toJson(cars); Intent intent = new Intent(FirstActivity.this, SecondActivity.class); intent.putExtra("list_as_string", jsonCars); startActivity(intent); 

function获取CarsModel

 private Cars getCarModel(String id, String name){ Cars cars = new Cars(); cars.id = id; cars.name = name; return cars; } 

SecondActivity.java

你必须导入java.lang.reflect.Type ;

onCreate()来检索ArrayList

 String carListAsString = getIntent().getStringExtra("list_as_string"); Gson gson = new Gson(); Type type = new TypeToken<List<Cars>>(){}.getType(); List<Cars> carsList = gson.fromJson(carListAsString, type); for (Cars cars : carsList){ Log.i("Car Data", cars.id+"-"+cars.name); } 

希望这会节省时间,我救了它。

完成

如果您使用通用数组列表 而不是像特定的types

EX:

 private ArrayList<Model> aListModel = new ArrayList<Model>(); 

在这里, Model = Class

接收意图就像:

 aListModel = (ArrayList<Model>) getIntent().getSerializableExtra(KEY); 

务必谨记:

这里Model-class必须像下面这样实现: ModelClass实现Serializable