Json字符串绑定自定义ListView

来源:互联网 发布:怎么下载淘宝号 编辑:程序博客网 时间:2024/06/01 08:07
本篇是给入门者看的,高手请绕行。
先看效果图:
图片 

客户端(手机)从服务器检索数据时,服务器检索的结果集resultSet属于重量级的数据结构。所以大伙都将resultSet转变为JSon字符串,瘦身后再传给客户端。

 JSon字符串的格式如下:

private String str_Json" {\"result\":["

           +"{\"user_name\":\"admin\",\"user_phone\":\"13612341234\",\"user_id\":\"1\"},"

           +"{\"user_name\":\"张三\",\"user_phone\":\"13612341235\",\"user_id\":\"2\"},"

           +"{\"user_name\":\"李四\",\"user_phone\":\"13612341236\",\"user_id\":\"3\"}"

        +"]}";

注:斜杠是转义符,不知道的问度娘。

不啰嗦了,直接上代码了。

publicclass MainActivity extends Activity {

  private ListView listView;

  private String str_Json = " {\"result\": ["

                +"{\"user_name\":\"admin\",\"user_phone\":\"13612341234\",\"user_id\":\"1\"},"

                +"{\"user_name\":\"张三\",\"user_phone\":\"13612341235\",\"user_id\":\"2\"},"

                +"{\"user_name\":\"李四\",\"user_phone\":\"13612341236\",\"user_id\":\"3\"}"

                + "]}";

  @Override

  protected void onCreate(BundlesavedInstanceState) {

         super.onCreate(savedInstanceState);

         setContentView(R.layout.main);

         Log.i("infoinfo","str_json:" + str_Json);

         listView = (ListView)findViewById(R.id.listView1);

         List<Map<String, Object>>list = getData();

         listView.setAdapter(new MyAdspter(this,list));

         return;

  }

  private List<Map<String, Object>>getData() {

         List<Map<String, Object>>list = new ArrayList<Map<String, Object>>();

 

         try {

                JSONObject jsonObject = newJSONObject(str_Json);

                JSONArray aNews = newJSONArray(jsonObject.getString("result"));

                for (int i = 0; i <aNews.length(); i++) {

                       Map<String, Object>map = new HashMap<String, Object>();

                       map.put("user_id",aNews.getJSONObject(i).getString("user_id"));

                       map.put("user_name",

                                     aNews.getJSONObject(i).getString("user_name"));

                       map.put("user_phone",

                                     aNews.getJSONObject(i).getString("user_phone"));

                       list.add(map);

 

                }

         } catch (JSONException ex) {

                Log.i("infoinfo","JSON Error: " + ex.toString());

         }

         return list;

  }

}

自定义显示行的XML文件是非常简单的,这里不啰嗦了。

最难的是适配器,我是扒网上的,大伙参考一下就好。

public classMyAdspter extendsBaseAdapter { 

     

    private int[] imgesIds = new int[]{R.drawable.id01,R.drawable.id02,

           R.drawable.id03,R.drawable.id04,R.drawable.id05}; 

   privateList<Map<String, Object>> data

   privateLayoutInflater layoutInflater

   privateContext context

   publicMyAdspter(Context context,List<Map<String, Object>> data){ 

        this.context=context; 

        this.data=data; 

        this.layoutInflater=LayoutInflater.from(context); 

   } 

   /**

     * 组件集合,对应list.xml中的控件

     * @author Administrator

     */ 

   publicfinalclassZujian{ 

      public ImageView img_id;

        public TextView tv_id

        public TextView tv_name

        public TextView tv_phone

   } 

   @Override 

   publicintgetCount() { 

        return data.size(); 

   } 

   /**

     * 获得某一位置的数据

     */ 

   @Override 

   publicObject getItem(intposition) { 

        return data.get(position); 

   } 

   /**

     * 获得唯一标识

     */ 

   @Override 

   publiclonggetItemId(intposition) { 

        return position; 

   } 

 

   @Override 

   publicView getView(intposition, View convertView, ViewGroup parent) { 

        Zujian zujian=null

        if(convertView==null){ 

            zujian=new Zujian(); 

            //获得组件,实例化组件 

            convertView=layoutInflater.inflate(R.layout.custom_usernull); 

           zujian.img_id =(ImageView) convertView.findViewById(R.id.imageView1);

            zujian.tv_id=(TextView)convertView.findViewById(R.id.tv_user_id); 

            zujian.tv_name=(TextView)convertView.findViewById(R.id.tv_user_name);  

            zujian.tv_phone=(TextView)convertView.findViewById(R.id.tv_user_phone);

            convertView.setTag(zujian); 

        }else

           zujian=(Zujian)convertView.getTag(); 

        } 

        //绑定数据 

        zujian.img_id.setImageResource(imgesIds[position]);

        zujian.tv_id.setText((String)data.get(position).get("user_id"));  

        zujian.tv_name.setText((String)data.get(position).get("user_name")); 

        zujian.tv_phone.setText((String)data.get(position).get("user_phone")); 

        return convertView; 

   } 

 

}  

ListView本身是可以纵向滑动的。如果嵌套在横向滑动控件就能实现双向滑动。对于展示数据是非常适合的。

原创粉丝点击