ListView虽然被RecyclerView替代了,但是ListView作为最常用的控件之一,还是很有必要学习的,咱们来学习一下ListView使用BaseAdapter
自定义BaseAdapter,绑定到ListView
礼貌性的给一下效果图。
emmm,一个很简单的ListView
。
大致为:
- 主布局添加
ListView
控件 - 新建item布局并写布局
- 绑定
adapter
到listview
添加数据然后刷新
ListView
绑定adapter用setAdapter()
方法。
数据更新用adapter的notifyDataSetChanged()
方法。
下面贴下关键代码:
ModelData.java
public class ModelData {
String name;
String price;
int icon;
public ModelData (String name, String price, int icon){
this.name = name;
this.price = price;
this.icon = icon;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public int getIcon() {
return icon;
}
public void setIcon(int icon) {
this.icon = icon;
}
}
自定义的BaseAdapter: ListAdapter.java
public class ListAdapter extends BaseAdapter {
private Context mContext;
private List<ModelData> list = new ArrayList<>();
public ListAdapter(Context context, List<ModelData> list){
this.mContext = context;
this.list = list;
}
@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;
if(convertView == null){
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item,null);
holder = new ViewHolder();
holder.name = convertView.findViewById(R.id.tv1);
holder.price = convertView.findViewById(R.id.tv2);
holder.icon = convertView.findViewById(R.id.icon);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
holder.name.setText(list.get(position).getName());
holder.price.setText(list.get(position).getPrice());
holder.icon.setImageResource(list.get(position).icon);
return convertView;
}
//ViewHolder
class ViewHolder{
TextView name;
TextView price;
ImageView icon;
}
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
private ListView listview;
private List<ModelData> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = findViewById(R.id.listview);
ListAdapter adapter = new ListAdapter(this,list);
listview.setAdapter(adapter);
//由于没图片所以用一下启动图标。。。
list.add(new ModelData("小米8 青春版","1399",R.mipmap.ic_launcher));
list.add(new ModelData("红米6A","549",R.mipmap.ic_launcher));
list.add(new ModelData("小米MIX 2","2699",R.mipmap.ic_launcher));
list.add(new ModelData("小米平板4","1899",R.mipmap.ic_launcher));
list.add(new ModelData("笔记本15.6","3899",R.mipmap.ic_launcher));
adapter.notifyDataSetChanged();
}
}
结束了,没错ListView自定义BaseAdapter以及数据绑定就这么简单。
至于源码,emmm,这么简单还需要拿???