自定义适配器:
注意: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;
}
}
}
好像就这些了哦~嗯