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