ListView的BaseAdapter的基本使用和ViewHolder模式的适配

来源:互联网 发布:网络招商政策 编辑:程序博客网 时间:2024/05/17 03:57

第一步呀BaseAdapter用ListView的布局

 

1.新建一个main.xml 文件

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<ListView android:id="@+id/lv"

 android:layout_width="fill_parent"

 android:layout_height="wrap_content"

 android:fastScrollEnabled="true" /></LinearLayout>

2.新建一个list_item.xml文件

 

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" a

ndroid:layout_width="match_parent"

android:layout_height="match_parent"

 android:orientation="horizontal" >

<ImageView android:id="@+id/img"

android:layout_width="wrap_content"

 android:layout_height="wrap_content" />

<LinearLayout

 android:layout_width="fill_parent"

android:layout_height="wrap_content"

 android:orientation="vertical" >

 <TextView android:id="@+id/tv"

android:layout_width="wrap_content"

 android:layout_height="wrap_content"

android:textSize="20sp" />

<TextView android:id="@+id/info"

 android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="14sp" />

</LinearLayout>

 

 

 

</LinearLayout>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public class Demo17Activity extends Activity {

private ListView lv;

 private List<Map<String, Object>> data;

 @Override

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.main);

lv = (ListView)findViewById(R.id.lv); //获取将要绑定的数据设置到

data中 data = getData();

MyAdapter adapter = new MyAdapter(this); lv.setAdapter(adapter); }

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

Map<String, Object> map;

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

ap = new HashMap<String, Object>();

map.put("img", R.drawable.ic_launcher);

map.put("title", "跆拳道"); map.put("info", "快乐源于生活..."); list.add(map); } return list; } //ViewHolder静态类 static class ViewHolder { public ImageView img; public TextView title; public TextView info; } public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater = null; private MyAdapter(Context context) { //根据context上下文加载布局,这里的是Demo17Activity本身,即this this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { //How many items are in the data set represented by this Adapter. //在此适配器中所代表的数据集中的条目数 return data.size(); } @Override public Object getItem(int position) { // Get the data item associated with the specified position in the data set. //获取数据集中与指定索引对应的数据项 return position; } @Override public long getItemId(int position) { //Get the row id associated with the specified position in the list. //获取在列表中与指定索引对应的行id return position; } //Get a View that displays the data at the specified position in the data set. //获取一个在数据集中指定索引的视图来显示数据 @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; //如果缓存convertView为空,则需要创建View if(convertView == null) { holder = new ViewHolder(); //根据自定义的Item布局加载布局 convertView = mInflater.inflate(R.layout.list_item, null); holder.img = (ImageView)convertView.findViewById(R.id.img); holder.title = (TextView)convertView.findViewById(R.id.tv); holder.info = (TextView)convertView.findViewById(R.id.info); //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } holder.img.setBackgroundResource((Integer)data.get(position).get("img")); holder.title.setText((String)data.get(position).get("title")); holder.info.setText((String)data.get(position).get("info")); return convertView; } }}

 

 

 

 

 

 

 

 

 

第二

 

 

 

package com.yee4.samplelistviewdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class BaseActivity  extends Activity {
 ListView mListView;
 private MyAdapter myAdapter;
 private MyAdapter2 myAdapter2;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  
  
  mListView = (ListView) findViewById(R.id.mListView);
  
  
  
  initData1();
  
 }
 
 
 //---------------------------方法一----------------------------------------
 //数据加载方式一
 private void initData1(){
  myAdapter = new MyAdapter(this);
  mListView.setAdapter(myAdapter);
  
  List<Map<String,String>> list = new ArrayList<Map<String,String>>();  
  
  
  for(int i = 0 ; i < 50;i ++ )
  {
   Map<String,String> map = new HashMap<String, String>();
   map.put("tv", "firstNameT"+i);
   map.put("if", "secondNameTextView"+i);
   list.add(map);
  }
  //设置数据源
  myAdapter.setData(list);
 }
 
  public class MyAdapter extends BaseAdapter{
  
  
  
    private LayoutInflater mInflater = null;
    private List<Map<String,String>> data;
   
         private MyAdapter(Context context){
             //根据context上下文加载布局,这里的是Demo17Activity本身,即this
             this.mInflater = LayoutInflater.from(context);
         }
      
         //设置外部数据
         public void setData(List<Map<String,String>> list){ 
          
          this.data =list;
          
          //通知listview 数据改变了刷页面
          this.notifyDataSetChanged();

         }


         //获取数据也的大小(个数)
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   if(data!=null){
    return data.size();
   }
   
   return 0;
  }

  //获取每个item数据
  @Override
  public Map<String,String> getItem(int point) {
   // TODO Auto-generated method stub
   return data.get(point);
  }

  @Override
  public long getItemId(int arg0) {
   // TODO Auto-generated method stub
   return 0;
  }

  //加载视图文件
  @Override
  public View getView(int point, View convertView, ViewGroup arg2) {
   // TODO Auto-generated method stub   
   
   
   //视图绑定,如果视图为空,重新加载一个视图
            if(convertView == null){              
                convertView = mInflater.inflate(R.layout.list_item, null);
               
            }
           
            //--------------------------------------------------------
           
            //数据邦迪
            Map<String,String> item =getItem(point);
            if(item!=null){
             TextView tvTextView = (TextView)convertView.findViewById(R.id.tv);
             tvTextView.setText(item.get("tv"));
             
             
                TextView infoTextView = (TextView)convertView.findViewById(R.id.info);
                infoTextView.setText(item.get("if"));
             
            }           
           
            return convertView;
  } 
  }

 
 
  //----------------方法二-------------------------
  private void intData2(){
 
   myAdapter2=new MyAdapter2(this);   
   mListView.setAdapter(myAdapter2);
   
   List<ListDataItem> list = new ArrayList<ListDataItem>();  
   for(int i = 0 ; i < 50;i ++ )
   {
    ListDataItem item1 =new ListDataItem();
    item1.setTv("第"+i+"个");
    item1.setInf("secondNameTextView"+i);    
    list.add(item1);
   }
   
   
   //设置数据源
   myAdapter2.setData(list);
  
  }
 
  public class MyAdapter2 extends BaseAdapter{
   private LayoutInflater mInflater = null;   
   private List<ListDataItem> data;           
  
   private MyAdapter2(Context context){            
    this.mInflater = LayoutInflater.from(context);
        
   }
  
   public void setData(List<ListDataItem> data){
    this.data = data;
    this.notifyDataSetChanged();
   }
  
  @Override
  public int getCount() {
   // TODO Auto-generated method stub
   if(data!=null){
    return data.size();
   }
   return 0;
  }

  @Override
  public ListDataItem getItem(int point) {
   // TODO Auto-generated method stub
   return data.get(point);
  }

  @Override
  public long getItemId(int arg0) {
   // TODO Auto-generated method stub
   return 0;
  }

  @Override
  public View getView(int point, View convertView, ViewGroup arg2) {
   // TODO Auto-generated method stub
   //视图绑定,如果视图为空,重新加载一个视图
            if(convertView == null){              
                convertView = mInflater.inflate(R.layout.list_item, null);
               
            }
           
            ListDataItem item =getItem(point);
           
            if(item!=null){
             TextView tvTextView = (TextView)convertView.findViewById(R.id.tv);
             tvTextView.setText(item.getTv());
             
             
                TextView infoTextView = (TextView)convertView.findViewById(R.id.info);
                infoTextView.setText(item.getInf());
             
            }           
   return convertView;
  }
  
  }
 
 
  private class ListDataItem{
   private String tv;
   private String inf;
  public String getTv() {
   return tv;
  }
  public void setTv(String tv) {
   this.tv = tv;
  }
  public String getInf() {
   return inf;
  }
  public void setInf(String inf) {
   this.inf = inf;
  }
   
  
  }
 
 
}
 

 

 

0 0
原创粉丝点击