1.layout_main里添加listView
2.新建item_layout
image.png
3.新建类,属性为item_layout每一个控件中要装入的数据
package com.example.baseadapter;
public class Msg {
private int img;
private String name;
private String text;
boolean isLike;
//getter,setter,和构造方法自行添加
4.新建自定义myAdapter 继承自BaseAdapter
public class myAdapter extends BaseAdapter {
private List<Msg> list;
Context context;
ViewHold viewHold;
public myAdapter(List<Msg> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public View getView(final int position, View view, ViewGroup parent) {
//获取布局
view=LayoutInflater.from(context).inflate(R.layout.list_item,null);
//对布局中的控件添加数据项对应的数据
ImageView imageView = view.findViewById(R.id.img);
imageView.setImageResource(list.get(position).getImg());
TextView name = view.findViewById(R.id.name);
name.setText(list.get(position).getName());
TextView text = view.findViewById(R.id.text);
text.setText(list.get(position).getText());
final ImageView islike = view.findViewById(R.id.like);
if (list.get(position).isLike) {
islike.setImageResource(R.mipmap.liked);
} else {
islike.setImageResource(R.mipmap.like);
}
//对控件添加对应的响应事件
ImageView repose = view.findViewById(R.id.repost);
repose.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "++++++++++啦啦啦+++++++++", Toast.LENGTH_LONG).show();
}
});
islike.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean temp = list.get(position).isLike;
temp = !temp;
if (temp) {
islike.setImageResource(R.mipmap.liked);
} else {
islike.setImageResource(R.mipmap.like);
}
list.get(position).isLike = temp;
myAdapter.this.notifyDataSetChanged();
}
});
return view;
}
}
5.在mainactivity 中添加数据,并将新建适配器,为listview 装入数据
private ListView listView;
private ImageView write;
private List<Msg> list;
//添加数据项
private void initData() {
for(int i = 0;i < 8;i++){
Msg msg=new Msg(imgs[i],"用户"+(i+1),"下雨了,好冷啊,冻死了"+(i+1),
i%3==0?true:false);
list.add(msg);
}
}
//装入数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list);
write = findViewById(R.id.write);
list=new ArrayList<>();
initData();
final myAdapter myAdapter=new myAdapter(list,this);
listView.setAdapter(myAdapter);
6.添加新的item
write.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Msg m=new Msg(R.mipmap.profile9,"新用户","新动态",false);
list.add(m);
myAdapter.notifyDataSetChanged();
listView.setTranscriptMode(AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL);
}
});
7.对Adapter进行优化
在自定义的Adatper类中添加静态类,属性为要找到控件
static class ViewHold{
ImageView imageView,repose,islike;
TextView text,name;
}
在自定义Adapter类 getView()方法中添加
if(view==null) {
view = LayoutInflater.from(context).inflate(R.layout.list_item, null);
viewHold=new ViewHold();
viewHold.imageView = view.findViewById(R.id.img);
viewHold.name = view.findViewById(R.id.name);
viewHold.text = view.findViewById(R.id.text);
viewHold.islike = view.findViewById(R.id.like);
viewHold.repose = view.findViewById(R.id.repost);
view.setTag(viewHold);
}else {
viewHold=(ViewHold)view.getTag();
}
之前所有的findViewById都可以用viewHold成员变量代替。