<ListView
android:id="@+id/count_list_bigger"
android:layout_below="@+id/money"
android:layout_above="@+id/bottom_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</ListView>
看起来超级简单呢,其实贼吉尔麻烦。
要用ListView应该做到的三点:
- 创建item的xml文件,用于显示每条item长啥样。
- 创建数据适配器,用于连接数据和ListView, 其中对getView函数的重写尤为重要,待会详细讲解
- 最后当然是数据啦,这个数据可以直接赋值给数组,也可以从数据库中获取。
第一点略过不讲,这个自主设计即可。
讲讲第二第三点。
首先你得重写适配器类 - -劝退了萌新的我有没有!
public class MyAdapter extends BaseAdapter {
public List<Data> mList;//我把数据列表放在适配器里了
public Context mContext;//不用管它
public LayoutInflater mLayoutInflater;//可以理解为给你的listView装数据的打气筒
public MyAdapter(Context context){//初始化一哈
mList = new ArrayList<>();
getDatabase();
mContext = context;
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {//这里他要看你要写几条数据
return mList.size();
}
@Override
public Object getItem(int position) {//这个为了让他找到你的列表中现在应该显示哪一条数据
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView==null) {
viewHolder = new ViewHolder();
convertView = mLayoutInflater.inflate(R.layout.count_item_bigger, null);
viewHolder.date = convertView.findViewById(R.id.date);
viewHolder.totalMoney = convertView.findViewById(R.id.total_money);
viewHolder.name = convertView.findViewById(R.id.name);
viewHolder.type = convertView.findViewById(R.id.type);
viewHolder.money = convertView.findViewById(R.id.money);
viewHolder.time = convertView.findViewById(R.id.time);
viewHolder.date_bar = convertView.findViewById(R.id.date_bar);
convertView.setTag(viewHolder);//保存缓存数据,优化作用
}else{
viewHolder= (ViewHolder) convertView.getTag();//读取缓存数据
}
//拉取你数组中的当前position位置的数据
Data data = mList.get(position);
//这个if else特定项目代码,别看
if(data.getDate().equals("") && data.getTotal_money().equals("")){
viewHolder.date_bar.setVisibility(View.GONE);
}
else {
viewHolder.date.setText(data.getDate());
viewHolder.totalMoney.setText(data.getTotal_money());
}
//这个也是
if(!data.getDate().equals("")){//不设置这个,回拉的话会错误的消除日期栏,我也不知道为什么orz
viewHolder.date_bar.setVisibility(View.VISIBLE);
}
//给你的控件显示东西啦
viewHolder.name.setText(data.getName());
viewHolder.type.setText(data.getType());
viewHolder.money.setText(data.getMoney());
viewHolder.time.setText(data.getTime());
return convertView;
}
//优化作用
private static class ViewHolder{
public TextView date;
public TextView totalMoney;
public TextView name;
public TextView type;
public TextView money;
public TextView time;
public LinearLayout date_bar;
}
//这个里面可以给你列表添加数据,可以手动添加,也可以从数据库读取,我举个栗子添加一条
private void getDatabase(){
Data data = new Data("今天", "+10000.00", "家教", "收入", "+1000.00", "15:00");
mList.add(data);
}
}
创建适配器
listBigger = findViewById(R.id.count_list_bigger);//找到你的listView
MyAdapter adapter = new MyAdapter(this);//把你创建一个你重写适配器的对象
listBigger.setAdapter(adapter);//赋值
然后得给你的数据分出个类
public class Data {
private String date;
private String total_money;
private String name;
private String type;
private String money;
private String time;
public Data(String data, String total_money, String name, String type, String money, String time){
this.date = data;
this.total_money = total_money;
this.name = name;
this.type = type;
this.money = money;
this.time = time;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getTotal_money() {
return total_money;
}
public void setTotal_money(String total_money) {
this.total_money = total_money;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getMoney() {
return money;
}
public void setMoney(String money) {
this.money = money;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
}
然后就可以啦!
真tm麻烦呢orz