前言:Listview 作为老牌的列表控件,虽然现在已经成为过气的了,但是有时我们在用到一些简单的列表的时候,我们还是有可能会使用到 Listview 如果在一个应用程序中出现许多要用到listview的控件,我们不可能为每一个listview都创建一个adapter来适配,故我想创建一个万能的适配器来对其进行适配。
普通 listview
XML
<ListView
android:id="@+id/lock_list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
bean类
package com.LY.project.Module;
/**
* Created by jie on 2018/4/14.
*/
public class ReadAllLock {
/**
* id : 238
* key : 00017786
* bluetooth : 96:B3:85:4B:54:C4
* owerid : 5
* name : WL96B3854B54C4
* lockname : 61402
* username :
* starttime : 1516506434
* endtime : 0
* motherid : 234
* power : 1
* givemessage :
* state : 1
* address : 61402
*/
private String id;
private String key;
private String bluetooth;
private String owerid;
private String name;
private String lockname;
private String username;
private String starttime;
private String endtime;
private String motherid;
private String power;
private String givemessage;
private String state;
private String address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getBluetooth() {
return bluetooth;
}
public void setBluetooth(String bluetooth) {
this.bluetooth = bluetooth;
}
public String getOwerid() {
return owerid;
}
public void setOwerid(String owerid) {
this.owerid = owerid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLockname() {
return lockname;
}
public void setLockname(String lockname) {
this.lockname = lockname;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getStarttime() {
return starttime;
}
public void setStarttime(String starttime) {
this.starttime = starttime;
}
public String getEndtime() {
return endtime;
}
public void setEndtime(String endtime) {
this.endtime = endtime;
}
public String getMotherid() {
return motherid;
}
public void setMotherid(String motherid) {
this.motherid = motherid;
}
public String getPower() {
return power;
}
public void setPower(String power) {
this.power = power;
}
public String getGivemessage() {
return givemessage;
}
public void setGivemessage(String givemessage) {
this.givemessage = givemessage;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
item view
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/lock_name"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center"
android:paddingTop="8dp"
android:text="lizi"
android:textSize="@dimen/text_emphasize" />
<TextView
android:id="@+id/lock_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:paddingBottom="6dp"
android:text="no Lock Address"
android:textSize="@dimen/text_normal" />
<View
android:layout_width="match_parent"
android:layout_height="0.1dp"
android:layout_marginTop="5dp"
android:background="@color/colorview"
android:padding="16dp" />
</LinearLayout>
Adapter
package com.LY.project.Adapter;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.LY.project.Module.ReadAllLock;
import com.LY.project.R;
import com.LY.project.View.Select_look;
import java.util.List;
/**
* Created by jie on 2018/4/11.
*/
public class MyLockAdapter extends BaseAdapter {
private List<ReadAllLock> lists;
private Context context;
private ViewHolder holder;
public MyLockAdapter(Context context, List<ReadAllLock> lists) {
this.context = context;
this.lists = lists;
}
@Override
public int getCount() {
return lists.size();
}
@Override
public Object getItem(int position) {
return lists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final int p=position;
holder = new ViewHolder();
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.my_lock_view, null);
holder.lockAddress = (TextView) convertView.findViewById(R.id.lock_address);
holder.lockName = (TextView) convertView.findViewById(R.id.lock_name);
holder.linearLayout = (LinearLayout) convertView.findViewById(R.id.linear);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.lockAddress.setText(lists.get(position).getAddress());
holder.lockName.setText(lists.get(position).getLockname());
holder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
context.startActivity(i);
}
});
return convertView;
}
class ViewHolder {
TextView lockAddress;
TextView lockName;
LinearLayout linearLayout;
}
}
万能适配模式(所谓的万能模板就是能够使不同处被抽离出来,不同处即每个item的不同,第二点不同就是为每一个item设置的所以我们就是将这些完全抽离出来,就达到我们的目的)
方法使用一个抽象方法既可以把我们想要的从adapter的实现抽离出来
viewhoder
public class ViewHolder {
private SparseArray<View> views;
private View convertView;
public ViewHolder(Context context, ViewGroup parent, int layoutId) {
views = new SparseArray<>();
convertView = LayoutInflater.from(context).inflate(layoutId, parent, false);
convertView.setTag(this);
}
public static ViewHolder getViewHolder(Context context, View convertView
, ViewGroup parent, int layoutId) {
if (convertView == null) {
return new ViewHolder(context, parent, layoutId);
}
return (ViewHolder) convertView.getTag();
}
public <T extends View> T getView(int viewId) {
View view = views.get(viewId);
if (view == null) {
view = convertView.findViewById(viewId);
views.put(viewId, view);
}
return (T) view;
}
public View getConvertView() {
return convertView;
}
}
Adapter
public abstract class Adapter<T> extends BaseAdapter {
protected LayoutInflater inflater;
protected Context context;
protected List<T> list;
protected int layoutId;
public Adapter(Context context, List<T> list, int layoutId) {
inflater = LayoutInflater.from(context);
this.context = context;
this.list = list;
this.layoutId = layoutId;
}
@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 viewHolder = getViewHolder(context, convertView, parent);
convert(viewHolder, list.get(position));
return viewHolder.getConvertView();
}
public abstract void convert(ViewHolder viewHolder, T item);
private ViewHolder getViewHolder(Context context, View convertView
, ViewGroup parent) {
return ViewHolder.getViewHolder(context, convertView, parent, layoutId);
}
//第一件事
private ViewHolder getViewHolder(Context context, View convertView
, ViewGroup parent) {
return ViewHolder.getViewHolder(context, convertView, parent, layoutId);
}
}
使用案例教程:
lv.setAdapter(new Adapter<Student>(this, list, R.layout.adapter_student) {
@Override
public void convert(ViewHolder viewHolder, Student item) {
TextView tv = viewHolder.getView(R.id.tv);
ImageView iv = viewHolder.getView(R.id.iv);
tv.setText(item.getName());
iv.setBackgroundResource(item.getImage());
}
});
Thanks