Android自定义样式listview

这个貌似很常用,以前会了现在正好用到了,所以就复习一下咯。

附上慕课网的视频地址,这个讲得hin详细http://www.imooc.com/learn/365

好了,步入正题,这里讲的就是要实现listview的样式自定义,就是把每个listview的item弄得花花绿绿的就是了。

首先,你要写一个item的layout,比如这里很简单,一个图片外加一个textview



    
    

整好了这个,在你的layout里插入个listview




    



然后,重点来了,就是弄个适配器(adapter),这里的适配器的功能就是把内容和样式配一脸。

package ym.com.datamining;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;
import java.util.Map;

/**
 * Created by Administrator on 2016/12/11.
 */
public class MyAdapter extends BaseAdapter {

    private List> data; //这就是数据啦
    private Context context;                //这个是上下文啦,就是谁调用的这个
    private LayoutInflater layoutInflater;  //这是……据说是用来加载布局的

    public MyAdapter(Context context,List> data){
        this.context=context;
        this.data=data;
        this.layoutInflater=LayoutInflater.from(context);

    }

    //就是看看一共多少项目
    @Override
    public int getCount() {
        return data.size();
    }
    //获得某一个位置的具体内容
    @Override
    public Object getItem(int position) {
        return data.get(position);
    }

    //这个,额,据说是获取唯一标识,但是感觉完全没什么卵用啊
    @Override
    public long getItemId(int position) {
        return position;
    }

    //组件的类
    public final class Widget{
        public ImageView img;
        public TextView text;
    }


    //这个就是重点啦,把数据和view合在一起
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Widget widget=null;
        //就是,那个listview有个缓存机制,会把以前有的东西缓存在convertView里
        if(convertView == null){
            widget=new Widget();
            convertView= layoutInflater.inflate(R.layout.list_item_layout,null);
            widget.img= (ImageView) convertView.findViewById(R.id.item_img);
            widget.text= (TextView) convertView.findViewById(R.id.item_text);
            //将组件与convertView联系起来
            convertView.setTag(widget);
        }else{
            widget=(Widget)convertView.getTag();
        }

        widget.img.setImageResource((Integer)data.get(position).get("image"));
        widget.text.setText((String)data.get(position).get("title"));

        return convertView;
    }
}

再之后,就是在你用到的activity里鼓捣鼓捣

listView= (ListView) findViewById(R.id.data_list);
        List> list=getData();
        listView.setAdapter(new MyAdapter(this,list));

这是getData()方法

private List> getData(){
        List> list=new ArrayList>();
        int[] imgId=new int[]{R.mipmap.s1,R.mipmap.s2,R.mipmap.s3,R.mipmap.s4,R.mipmap.s5,R.mipmap.s6,
                R.mipmap.s7,R.mipmap.s8,R.mipmap.s9,R.mipmap.s10};
        String[] text=new String[]{
                "(数据挖掘十大经典算法)\nC4.5","(数据挖掘十大经典算法)\nK-Means算法","(数据挖掘十大经典算法)\nSupport vector machines",
                "(数据挖掘十大经典算法)\nThe Apriori algorithm","(数据挖掘十大经典算法)\n最大期望(EM)算法","(数据挖掘十大经典算法)\nPageRank",
                "(数据挖掘十大经典算法)\nAdaBoost","(数据挖掘十大经典算法)\nkNN","(数据挖掘十大经典算法)\nNaive Bayes",
                "(数据挖掘十大经典算法)\nCART: 分类与回归树"
        };
        for (int i = 0; i <10 ; i++) {
            Map map=new HashMap();
            map.put("image",imgId[i]);
            map.put("title",text[i]);
            list.add(map);
        }
        return list;
    }

你可能感兴趣的:(Android开发)