博客源址:在两个activity之间使用intent传递list类型的对象
博客时间:2012-11-12 08:49
在两个activity之间传递list类型的对象。
第一个界面
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Map;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.util.Log;
- import android.view.Menu;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- public classQueryActivity extends Activity {
- private Buttonbutton;
- private List<Map<String,Object>>list;
- Stringresult="[{\"city\":\"changsha\",\"street\":\"no2\"},{\"city\":\"beijing\",\"street\":\"no5\"}]";
- @SuppressWarnings("unchecked")
- public void onCreate(BundlesavedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_query);
- this.button=(Button)findViewById(R.id.button);
- button.setOnClickListener(new buttonClick());
- String result1="{\"address\":"+result+"}";
- Log.d("result1",result1);
- try{
- JSONObject json=new JSONObject(result1);
- JSONArray jsonlist=json.getJSONArray("address");
- list = new ArrayList<Map<String,Object>>();
- list=JsonHelper.toList(jsonlist);
- Log.d("list***",list.toString());
- }
- catch(Exception e){
- }
- }
- classbuttonClickimplements OnClickListener{
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method stub
- Intentintent=newIntent(QueryActivity.this,ListViewActivity.class);
- intent.putExtra("list", (Serializable)list);
- QueryActivity.this.startActivity(intent);
- Log.d("list",(Serializable)list+"");
- }
- }
- }
第二个界面
有两个layout文件 创建时候注意listview在创建activity的时候的layout中定义。
例如:ListViewActivity
Java
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import android.os.Bundle;
- import android.app.Activity;
- import android.content.Intent;
- import android.view.Menu;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- public classListViewActivity extends Activity {
- @SuppressWarnings("unchecked")
- @Override
- publicvoidonCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_list_view);
- Intent intent=getIntent();
- List<HashMap<String,String>> mylist = (List<HashMap<String, String>>)intent.getSerializableExtra("list");
- ListView list = (ListView)findViewById(R.id.MyListView);
- SimpleAdapter mSchedule = new SimpleAdapter(
- this, //没什么解释
- mylist,//数据来源
- R.layout.my_listitem,//ListItem的XML实现
- //动态数组与ListItem对应的子项
- new String[] {"city","street"},
- //ListItem的XML文件里面的两个TextView ID
- new int[] {R.id.edit01,R.id.edit02});
- //添加并且显示
- list.setAdapter(mSchedule);
- }
- }
其中还会用到一个工具类 将一个jsonArray类型的字符串转换成list—hashmap
Java.class
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.util.*;
- @SuppressWarnings({ "rawtypes", "unchecked" })
- public classJsonHelper {
- public static Object toJSON(Objectobject) throwsJSONException {
- if (objectinstanceof Map) {
- JSONObject json = new JSONObject();
- Map map = (Map) object;
- for (Object key : map.keySet()) {
- json.put(key.toString(), toJSON(map.get(key)));
- }
- return json;
- } else if (object instanceof Iterable) {
- JSONArray json = new JSONArray();
- for (Object value : ((Iterable)object)) {
- json.put(value);
- }
- return json;
- } else {
- return object;
- }
- }
- publicstaticbooleanisEmptyObject(JSONObject object) {
- return object.names() ==null;
- }
- publicstaticMap<String, Object> getMap(JSONObject object, String key)throws JSONException {
- returntoMap(object.getJSONObject(key));
- }
- publicstaticMap<String, Object> toMap(JSONObject object)throws JSONException {
- Map<String,Object> map = newHashMap();
- Iterator keys = object.keys();
- while (keys.hasNext()) {
- String key = (String) keys.next();
- map.put(key, fromJson(object.get(key)));
- }
- return map;
- }
- public static List toList(JSONArrayarray) throwsJSONException {
- List list = new ArrayList();
- for (int i = 0; i < array.length(); i++) {
- list.add(fromJson(array.get(i)));
- }
- return list;
- }
- privatestaticObject fromJson(Object json)throws JSONException {
- if (json == JSONObject.NULL) {
- return null;
- } else if (json instanceof JSONObject) {
- returntoMap((JSONObject) json);
- } else if (json instanceof JSONArray) {
- returntoList((JSONArray) json);
- } else {
- return json;
- }
- }
- }
第一个layout
- <span style="font-size:18px;">activity_list_view.xml
- <?xmlversionxmlversion="1.0"encoding="utf-8"?>
- <LinearLayout
- android:id="@+id/LinearLayout01"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- xmlns:android="http://schemas.android.com/apk/res/android">
- <ListViewandroid:layout_widthListViewandroid:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/MyListView">
- </ListView>
- </LinearLayout></span>
第二个layout(自己新建的)
my_listitem.xml
- <?xmlversionxmlversion="1.0"encoding="utf-8"?>
- <LinearLayout
- android:layout_width="fill_parent"
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_height="wrap_content"
- android:id="@+id/MyListItem"
- android:paddingBottom="3dip"
- android:paddingLeft="10dip">
- <EditText
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:id="@+id/edit01"/>"
- <EditText
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- android:id="@+id/edit02"/>
- </LinearLayout>