通过意图传递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来完成这一项。
-
在依赖关系块build.gradle中添加
compile 'com.google.code.gson:gson:2.2.4'
。 -
点击 与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