Anroid必学之BaseAdapter适配器

Andriod中的适配器有Adapter、SimpleAdapter和BaseAdapter.而我们今天重点学习的是最后一种BaseAdapter,也是Android最常用的一种了....

第一步:把布局画好,直接写一个ListView列表

   <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView"
        ></ListView>

第二步:来新建一个Item布局

 <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:id="@+id/img"
        android:background="@mipmap/ic_launcher"
        />
    <TextView
        android:gravity="center"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_toRightOf="@+id/img"
        android:id="@+id/tv01"
        android:text="00"
        />
    <TextClock
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:id="@+id/tv02"
        android:layout_toRightOf="@+id/img"
        android:layout_below="@+id/tv01"
        />

第三步:新建一个ItemBean类

public class ItemBean {
   //都为公有,可以访问的
    public int ItemImageId;
    public String ItemTitle;
    public String ItemCount;

    //创建一个构造方法
    ItemBean(int itemImageId, String itemTitle, String itemCount){
        ItemImageId=itemImageId;
        ItemTitle=itemTitle;
        ItemCount=itemCount;
    }
}

第四步:新建一个Java类,类名为MyBaseAdapter,继承自BaseAdapter


public class MyBaseAdapter extends BaseAdapter {//继承自BaseAdapter进行导包

    //数据源与数据适配器进行关联
    private List<ItemBean> mList;//一个集合,写在TtemBean中
    private LayoutInflater mInflater;
 
    //创建一个构造方法
    MyBaseAdapter(Context context, List<ItemBean> list){
        mList=list;
        mInflater=LayoutInflater.from(context);
    }

    //导过包出来的四个方法。
    @Override
    public int getCount() {
        return mList.size();//返回ListVIew所需要显示的数据量
    }

    @Override
    public Object getItem(int i) {
        return mList.get(i);//集合的位置
    }

    @Override
    public long getItemId(int i) {
        return i;//id
    }

    //最最最重要的方法,这才是主要写逻辑的方法
    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

       ViewHolder viewHolder;//定义一个类

        if(view==null){

          viewHolder=new ViewHolder();//对ViewHolder类进行实例化

            view=mInflater.inflate(R.layout.item,null);//加载item布局

           /*
            *第一个参数是要加载的布局
            *第二个参数一般默认设置为null
            *
            */
            
            //寻找ViewHolder中控件的Id,
            viewHolder.ImageId= (ImageView) view.findViewById(R.id.img);

            viewHolder.Title= (TextView) view.findViewById(R.id.tv01);

            viewHolder.Count= (TextView) view.findViewById(R.id.tv02);

            //通过setTag将view与ViewHolder绑定
            view.setTag(viewHolder);
        }else{
            //通过ViewHolder对象找到对应的空文件
            viewHolder= (ViewHolder) view.getTag();
        }

        ItemBean bean=mList.get(i);

        //对ViewHolder类中的控件进行赋值
        viewHolder.ImageId.setImageResource(bean.ItemImageId);

        viewHolder.Title.setText(bean.ItemTitle);

        viewHolder.Count.setText(bean.ItemCount);

        return view;//返回一个View
    }
    /*
     *创建一个内部类ViewHolder
     * 为了避免findViewById的重复的操作
     */
    class ViewHolder{
        private ImageView ImageId;
        private TextView Title;
        private TextView  Count;
    }

}

第五步;最后来到我们期待已久的主JAVA类

##1.初始化控件

  private ListView listView;
  
    private ItemBean itemBean;//对ItemBean类进行初始化

##2.在onCreate方法中进行编写
   
    List<ItemBean> itemBeen=new ArrayList<>();
        for(int i=0;i<20;i++){

            itemBeen.add( new ItemBean(R.mipmap.ic_launcher,"我是标题"+i,"我是内容"+i));
        }
       listView= (ListView) findViewById(R.id.listView);//寻找Id

                            /*
                             *创建一个适配器MyBaseAdapter
                             *第一个参数:上下文
                             *第二个参数:相当于是一个数据源
                             */

        listView.setAdapter(new MyBaseAdapter(this,itemBeen));//将listView与适配器进行绑

      
    }
 

最后我们来看下运行结果

posted @ 2017-03-18 19:33  陌上花开222  阅读(588)  评论(0编辑  收藏  举报