目的:为了加快UI的响应和使用自定义的ListView
BaseAdapter基本结构
public int getCount();
//返回适配器中数据的条数
public Object getItem(int i);
//获取数据集中与指定索引对应的数据项
public long getItemId(int i);
//获取指定行对应的ID
public View getView(int i,VIew view, ViewGRoup viewGroup);
//获取每一个Item的显示内容
参数1:i,判断显示在界面上的第几个item
参数2:view,显示在界面上的一个item
BaseAdapter基本结构
public int getCount();
//返回适配器中数据的条数
public Object getItem(int i);
//获取数据集中与指定索引对应的数据项
public long getItemId(int i);
//获取指定行对应的ID
public View getView(int i,VIew view, ViewGRoup viewGroup);
//获取每一个Item的显示内容
参数1:i,判断显示在界面上的第几个item
参数2:view,显示在界面上的一个item
参数3:viewGroup加载xml视图时使用
1.主界面的xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.xxx.baseadaptertest.MainActivity">
<ListView
android:id="@+id/listView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
2.自定义布局的xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/device_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"/>
<TextView android:id="@+id/device_address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"/>
</LinearLayout>
3.代码
public class MainActivity extends AppCompatActivity {
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView)findViewById(R.id.listView);
MyAdapter adapter = new MyAdapter(this);
lv.setAdapter(adapter);
}
//静态类
static class ViewHolder{
TextView deviceName;
TextView deviceAddress;
}
private class MyAdapter extends BaseAdapter{
private LayoutInflater mInflator;
public MyAdapter(Context context){
//根据context上下文加载布局
this.mInflator = LayoutInflater.from(context);
}
//显示多少条item的数据
@Override
public int getCount() {
return 3;
}
@Override
public Object getItem(int i) {
return i;
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder = null;
//如果缓存view为空,则新建
if(view == null){
viewHolder = new ViewHolder();
//加载自定义的item布局
view = mInflator.inflate(R.layout.listitem_device,null);
viewHolder.deviceName = (TextView)view.findViewById(R.id.device_name);
viewHolder.deviceAddress = (TextView)view.findViewById(R.id.device_address);
//将设置好的布局保存到缓存中,设置到tag里方便后面取出
view.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)view.getTag();
}
//设置数据,以可以根据传入的Data来获取
viewHolder.deviceName.setText("vivo");
viewHolder.deviceAddress.setText("123456");
return view;
}
}
}