新浪微博随便看看

【分析】

其实这个小画面是很简单的:

1.自定义适配器的书写

2.实体类的编写

3.ListView及ListView_Item

4.ListView的绑定数据源与控件

    代码:

1.第一个就是自定义适配器MyAdapter:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
package cn.edu.bzu.adapter;
  
import java.util.List;
  
import cn.edu.bzu.entity.Information;
import cn.edu.bzu.weibo_looking.R;
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;
  
/**
 * 自定义Adapter实现listView的显示
 * @author monster
 * @date : 2015-04-28
 */
public class MyAdapter extends BaseAdapter {
    private List<Information> list;
    private Context mContext;
    private LayoutInflater mInflater;
    //定义构造方法
    public MyAdapter(List<Information> list, Context mContext) {
        super();
        this.list = list;
        this.mContext = mContext;
    }
  
    @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) {
        ViewHolder holder=null;
        if(convertView==null){
            convertView=mInflater.from(mContext).inflate(R.layout.listview_item,null);  //布局转换成视图
            holder=new ViewHolder();
            //实例化控件
            holder.Image=(ImageView)convertView.findViewById(R.id.Iv);
            holder.Name=(TextView)convertView.findViewById(R.id.Name);
            holder.Time=(TextView)convertView.findViewById(R.id.Time);
            holder.Contents=(TextView)convertView.findViewById(R.id.Contents);
            convertView.setTag(holder); //设置setTag使得程序得以优化
        }else{
            holder=(ViewHolder) convertView.getTag();
        }
        //给控件赋值
        holder.Image.setBackgroundResource(list.get(position).getImgId());
        holder.Name.setText(list.get(position).getName());
        holder.Time.setText(list.get(position).getDate());
        holder.Contents.setText(list.get(position).getContent());
        return convertView;
    }
      
    class ViewHolder{
        ImageView Image;
        TextView  Name;
        TextView  Time;
        TextView  Contents;
    }
}

2.然后就是MainActivity的编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package cn.edu.bzu.weibo_looking;
  
import java.util.ArrayList;
import java.util.List;
  
import cn.edu.bzu.adapter.MyAdapter;
import cn.edu.bzu.entity.Information;
import android.os.Bundle;
import android.widget.ListView;
import android.app.Activity;
  
public class MainActivity extends Activity {
    private ListView listView;
    private MyAdapter adapter;
    private List<Information> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setData();//数据源
         initView();
    }
    private void initView() {
        // 初始化控件
        listView=(ListView) findViewById(R.id.Lv);
        listView.setAdapter(adapter);  //绑定适配器
    }
    private void setData() {
        // 设置数据源
         list=new ArrayList<Information>();
        list.add(new ListCell(R.drawable.p1, "强强", "1分钟前", "今天又要去旅游了"));
        list.add(new ListCell(R.drawable.p2, "佳佳", "19分钟前", "好开心,我终于变瘦了"));
        list.add(new ListCell(R.drawable.p3, "浩浩", "21分钟前", "又有好吃的了"));
        list.add(new ListCell(R.drawable.p4, "康康", "33分钟前", "真是的,你怎么这么坏"));
        list.add(new ListCell(R.drawable.p5, "云云", "43分钟前", "哎呀,听说你又涨工资了"));
        list.add(new ListCell(R.drawable.p6, "璐璐", "58分钟前", "今天你逗比了么"));
        list.add(new ListCell(R.drawable.p7, "博博", "1小时前", "我就说这个软件很棒嘛"));
        adapter=new MyAdapter(list, MainActivity.this);
    }           
}

Ps:在书写MainActivity的时候:一定要记住这些东西

------------------------------------------------------------------------------------------------------------------------

 CommonAdapter.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package cn.edu.bzu.util;
  
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
  
import java.util.List;
  
import cn.edu.bzu.weibo_looking.R;
  
/**
 * CommonAdapter makes Common extends BaseAdapter
 * Created by monster on 2015/5/3.
 */
public abstract class CommonAdapter<T> extends BaseAdapter {
    protected Context mContext;
    protected List<T> mDatas;
    protected LayoutInflater mInflater;
  
    public CommonAdapter(Context context,List<T>datas){
        this.mContext=context;
        this.mDatas=datas;
        mInflater=LayoutInflater.from(context);
    }
    @Override
    public int getCount() {
        return mDatas.size();
    }
  
    @Override
    public T getItem(int position) {
        return mDatas.get(position);
    }
  
    @Override
    public long getItemId(int position) {
        return position;
    }
  
    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        ViewHolder holder=ViewHolder.get(mContext,convertView,parent, R.layout.listview_item,position);
        convert(holder,getItem(position));
        return holder.getConvertView();
    }
    public abstract void convert(ViewHolder holder,T t);
      
}

  ViewHolder.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package cn.edu.bzu.util;
  
import android.content.Context;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
  
/**
 * Created by monster on 2015/4/20.
 *  Have a good package ViewHolder
 *  get(Context context,View convertView,ViewGroup parent,int layoutId,int position) To make ViewHolder
 *
 */
public class ViewHolder {
    private SparseArray<View> mViews; //稀疏数组,SparseArray比HashMap执行效率高
    private int mPosition;
    private View mConvertView; //作用是方便系统在重写UI时,能重用原来实用过的View实例,以此来降低系统资源的消耗和提高代码效率
    /*
     *ConvertView的几点特征。
     *对于一个ListView,Android保存所有曾经生成过的ConvertView实例,直至系统垃圾回收这些实例位置,而不是只保存最后使用的ConvertView对象。
     *这些保存的ConvertView以使用时间顺序排序,并依次被传递到getView函数中。
     */
    public ViewHolder(Context context,ViewGroup parent,int layoutId,int position){
        //ViewHolder的构造方法
        this.mPosition=position;
        this.mViews=new SparseArray<View>(); //初始化SparseArray对象
        mConvertView= LayoutInflater.from(context).inflate(layoutId,parent,false);
        mConvertView.setTag(this);
    }
  
    public static ViewHolder get(Context context,View convertView,ViewGroup parent,int layoutId,int position){
        if(convertView==null){
               return new ViewHolder(context,parent,layoutId,position);
        }else{
            ViewHolder holder=(ViewHolder)convertView.getTag();
            holder.mPosition=position;
            return holder;
        }
    }
  
    /**
     * 通过viewId获取控件
     * @param viewId
     * @param <T>
     * @return
     */
    public <T extends View> T getView(int viewId){
        View view=mViews.get(viewId);
        if(view==null){
            view=mConvertView.findViewById(viewId);
            mViews.put(viewId,view);
        }
        return (T)view;
    }
    public View getConvertView() {
        return mConvertView;
    }
  
    /**
     * 为设置TextView的值
     * @param viewId
     * @param text
     * @return
     */
    public ViewHolder setText(int viewId,String text){
        TextView tv=getView(viewId);
        tv.setText(text);
        return this;
    }
  
    /**
     * 设置图片
     * @param viewId
     * @param resId
     * @return
     */
    public ViewHolder setImageResource(int viewId,int resId){
        ImageView view=getView(viewId);
        view.setImageResource(resId);
        return this;
    }
}

 OptimizeAdapter.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package cn.edu.bzu.adapter;
  
import java.util.List;
  
import android.content.Context;
import cn.edu.bzu.entity.Information;
import cn.edu.bzu.util.CommonAdapter;
import cn.edu.bzu.util.ViewHolder;
import cn.edu.bzu.weibo_looking.R;
  
public class OptimizeAdapter extends CommonAdapter<Information> {
  
    public OptimizeAdapter(Context context, List<Information> datas) {
        super(context, datas);
    }
  
    @Override
    public void convert(ViewHolder holder, Information information) {
        //给控件赋值,通过getter/setter方法实现
        holder.setText(R.id.Name,information.getName());
        holder.setText(R.id.Time, information.getDate());
        holder.setText(R.id.Contents,information.getContent());
        holder.setImageResource(R.id.Iv, information.getImgId());
    }
  
}

 

posted @ 2015-05-08 15:12  孙伟强  阅读(303)  评论(0编辑  收藏  举报