Android 适配器(Adapter)


什么是适配器?                                                                

简单来说就是对数据界面的适配。一些不能直接赋值到界面上的数据类型(如List,Map等),就要靠适配器来展示到页面界面

 

适配器控件工作流程:

集合类数据对象 --> 适配器对象 --> 适配器控件

 

 

常用的适配器控件                                                            

1.ArrayAdapter

主要用于纯文本数据的显示

 

2.SimpleAdapter

可用于复杂的数据显示,将集合中不同的数据项填充到不同的View的不同组件中

 

3.BaseAdapter

它是以上适配器的公共基类,可以实现以上适配器的所有功能,且可以自定义Adapter来定制每个条目的外观功能,具有较高的灵活性

 

 

BaseAdapter使用示例                                                        

最终效果图:

 

 

1.界面布局:

 

 说明:上面是约束布局组件,下面是ListView组件

 

 

 2.ListView组件中每一个item的布局

 

 

 

 3.为Item创建实体类

public class QQMsgBean {
    private int qq_icon;
    private String qq_name;
    private String lastmsg_time;
    private String lasttitle;
    private String noetrendmsg_count;

    public QQMsgBean(int qq_icon, String qq_name, String lastmsg_time, String lasttitle, String noetrendmsg_count) {
        this.qq_icon = qq_icon;
        this.qq_name = qq_name;
        this.lastmsg_time = lastmsg_time;
        this.lasttitle = lasttitle;
        this.noetrendmsg_count = noetrendmsg_count;
    }

    //get,set方法....
}

 

 

 

 4.创建一个适配器类

 该类继承BaseAdapter类,负责把数据和界面适配

 

public class QQMsgAdapter extends BaseAdapter {

    private List<QQMsgBean> data;           //数据
    private Context context;                //上下文对象,方便getItem方法使用

    //构造器方法
    public QQMsgAdapter(List<QQMsgBean> data, Context context) {
        this.data = data;
        this.context = 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;
    }

    //获取每一行item的显示内容
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        if(convertView == null){    //充分利用缓存机制提高效率
            convertView = LayoutInflater.from(context).inflate(R.layout.item_qqmessage,parent,false);
        }

        QQMsgBean bean = data.get(position);                //通过索引获取对应的数据对象

        ImageView img = (ImageView)convertView.findViewById(R.id.img_qqicon);//获取view组件
        img.setImageResource(bean.getQq_icon());                       //传入值给view组件

        TextView name = (TextView)convertView.findViewById(R.id.tv_qqname);
        name.setText(bean.getQq_name());

        TextView lasttitle = (TextView)convertView.findViewById(R.id.tv_lasttitle);
        lasttitle.setText(bean.getLasttitle());

        TextView tv_lastmsgtime = (TextView)convertView.findViewById(R.id.tv_lastmsgtime);
        tv_lastmsgtime.setText(bean.getLastmsg_time());

        TextView tv_notrendmsgcount = (TextView)convertView.findViewById(R.id.tv_notrendmsgcount);
        tv_notrendmsgcount.setText(bean.getNoetrendmsg_count());

        return convertView;
    }
}

 

 

 

 

 5.Avtivity代码

public class QQMessageActivity extends AppCompatActivity {
    private ListView lvMessage;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_qqmessage);

        lvMessage = (ListView)findViewById(R.id.lvMessage);

        List<QQMsgBean> data = getData();                   //获取数据集合
        lvMessage.setAdapter(new QQMsgAdapter(data,this));  //把数据集合塞到适配器里面适配

    }

    public static List<QQMsgBean> getData(){}//获取数据集合的方法

}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM