【Android】ListView中自定义适配器的用法

自定义适配器:

注意:listView的属性:必须为match_parent

android:layout_width=”match_parent”

android:layout_height=”match_parent”

 

private ListView listView;

private Adapter adapter;

//————-onCreate—————

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

adapter = new MyAdapter(getData);

listView.setAdapter(adapter);

 

//————-onCreate—————

 

public List<String> getData(){

List<String> list ;

for(int i=0;i<10;i++){

list.add(“jack”+i);

}

return list;

}

 

class MyAdapter extends BasAdapter {

private List<String> list;

public MyAdapter(List<String> list){

this.list = list;

}

public int getCount(){

return  list.size() ;

}

public Object getItem(int position){

return list.get(position);

}

public long getItemId(int position){

return position;

}

//以下函数为系统自动调用,不可以直接在下面的函数中每获得一个position就创建

//一个新的TextView并返回,不可以!最好是先创建每个item的布局文件,再加载

public View getView(int position,View convertView,ViewGroup parent){

//——————-1-每次都new新TextView,会报内存溢出的错误————————

View view = LayoutInflator.from(MainActivity.this).inflate(R.layout.item,null);//自己新建一个item.xml文件作为listView每个item的布局文件,然后用这种方式加载

TextView textView = (TextView)this.findViewById(R.id.textView1);

textView.setText(list.get(position));

return view;

//——————–1————————

//——————–2标准写法————————

View view = null;

if(convertView == null){

view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item,null);

}else{

view = convertView;

}

TextView textView = (TextView)this.findViewById(R.id.textView1);

textView.setText(list.get(position));

return view;

 

//——————–2————————

}

}

 

ListView:被当做布局使用。

private ListView listView;

private ArrayAdapter<String> adapter;

//————-onCreate—————

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

listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);//设置选中模式

adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_item_multi_choice,getData());//设置选中模式后要相应改变布局文件

listView.setAdapter(adapter);

可以listView.setOnItemClickListener(new onItemClickListener(){

});//设置选中监听事件

 

//————-onCreate—————

 

public List<String> getData(){

List<String> list = new ArrayList<String>();

for(int i=0;i<10;i++){

list.add(“jack”+i);

}

return list;

}

 

ListView的图文混排:

功能描述:将Json格式的数据库内容包括文字和图片信息,在listview中以图文混排的形式展现。

1>、首先是有一个数据库,里面有一个产品表,产品属性为:id,name、address、price、img。以Json数据格式展现为{“products”:[{“id”:100,”price”:”34″,”address”:”beijing”,”name”:”milk”,”img”:”pic1.png”},{“id”:101,”price”:”35″,”address”:”shanghai”,”name”:”milk”,”img”:”pic2.png”},{“id”:102,”price”:”34″,”address”:”beijing”,”name”:”milk”,”img”:”pic3.png”},{“id”:103,”price”:”32″,”address”:”beijing”,”name”:”milk”,”img”:”pic4.png”}]}

其中id属性值为int,其他为String,图片为Image。

2>首先创建一个item.xml。内置一个ListView,里面放上一个ImageView和三个TextView,作为展示产品的布局文件。

3>创建HttpUtils类,获取服务器端的Json数据:

package com.example.android_asynctask;

 

import org.apache.http.HttpResponse;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.DefaultHttpClient;

import org.apache.http.util.EntityUtils;

 

public class HttpUtils{

public static String sendPostMethod(String path,String encoding){

String result = “”;

HttpClient httpClient = new DefaultHttpClient();

try{

HttpPost post = new HttpPost(path);

HttpResponse response = httpClient.execute(post);

if(response.getStatusLine().getStatusCode()==200){

result = EntityUtils.toString(response.getEntity(),encoding);

}

}catch(Exception e){

e.printStackTrace();

}finally{

httpClient.getConnectionManager().shutdown();

}

return result;

}

 

public static byte[] getImageView(String path){

byte[] data = null;

HttpClient httpClient = new DefaultHttpClient();

try{

HttpPost post = new HttpPost(path);

HttpResponse response = httpClient.execute(post);

if(response.getStatusLine().getStatusCode()==200){

data = EntityUtils.toByteArray(response.getEntity());

}

}catch(Exception e){

e.printStackTrace();

}finally{

httpClient.getConnectionManager().shutdown();

}

return data;

}

}

 

 

3>创建JsonTools类,用来解析Json格式的数据:

package com.example.android_asynctask;

 

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.json.JSONArray;

import org.json.JSONObject;

 

public class JsonTools {

/**

* {“id”:100,”price”:”34″,”address”:”beijing”,”name”:”milk”,”img”:”pic1.png”}

* */

public static List<Map<String,Object>> parseJson(String jsonString){

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

try {

JSONObject jsonObject = new JSONObject(jsonString);

JSONArray jsonArray = jsonObject.getJSONArray(“products”);

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

JSONObject ele = jsonArray.getJSONObject(i);

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

map.put(“id”,ele.getInt(“id”));

map.put(“price”, ele.get(“price”));

map.put(“address”,ele.get(“adress”));

map.put(“name”,ele.get(“name”));

map.put(“img”, ele.get(“img”));

list.add(map);

}

} catch (Exception e) {

e.printStackTrace();

}

return list;

}

}

4>MainActivity,使用异步任务,获取服务器端的Json数据,然后显示在客户端的listView上:

package com.example.android_asynctask;

 

import java.net.URL;

import java.util.List;

import java.util.Map;

 

import android.app.Activity;

import android.app.ProgressDialog;

import android.graphics.drawable.Drawable;

import android.os.AsyncTask;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

 

public class MainActivity extends Activity {

private ListView listView;

private ProductAdapter adapter;

private String PATH = “http://f1.howzhi.com/ci/2012/12-27/1706317d0942546032.jpg”;//这里应该是服务器端的图片目录的上一级目录

private ProgressDialog dialog;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.item);

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

dialog = new ProgressDialog(MainActivity.this);

dialog.setTitle(“下载图片”);

dialog.setMessage(“下载中”);

adapter = new ProductAdapter();

new MyTask().execute(PATH);

}

class MyTask extends AsyncTask<String,Void,List<Map<String,Object>>>{

@Override

protected void onPostExecute(List<Map<String, Object>> result) {

super.onPostExecute(result);

adapter.setData(result);

listView.setAdapter(adapter);

adapter.notifyDataSetChanged();

dialog.dismiss();

}

 

@Override

protected void onPreExecute() {

super.onPreExecute();

dialog.show();

}

 

@Override

protected List<Map<String, Object>> doInBackground(String params) {

String jsonString = HttpUtils.sendPostMethod(params[0],“utf-8”);

List<Map<String, Object>> list = JsonTools.parseJson(jsonString);

return list;

}

}

 

public class ProductAdapter extends BaseAdapter {

List<Map<String,Object>> list;

public void setData(List<Map<String,Object>> list){

this.list = list;

}

 

@Override

public int getCount() {

return list.size();

}

 

@Override

public Object getItem(int position) {

return list.get(position);

}

 

@Override

public long getItemId(int position) {

return position;

}

 

@Override

public View getView(int position, View convertView, ViewGroup parent) {

View view = null;

if(convertView == null){

view = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, null);

}else{

view = convertView;

}

TextView textView1 = (TextView)findViewById(R.id.textView1);

textView1.setText(list.get(position).get(“name”).toString());

TextView textView2 = (TextView)findViewById(R.id.textView2);

textView2.setText(list.get(position).get(“address”).toString());

TextView textView3 = (TextView)findViewById(R.id.textView3);

textView3.setText(list.get(position).get(“price”).toString());

ImageView imageView = (ImageView)findViewById(R.id.imageView1);

try {

byte[] data = HttpUtils.getImageView(PATH+list.get(position).get(“img”));

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

imageView.setImageBitmap(bitmap);

} catch (Exception e) {

e.printStackTrace();

}

return view;

}

}

}

好像就这些了哦~嗯

 

此条目发表在Android技术分类目录,贴了, , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注