android 开发关于ListView的基础用法(主观理解)


    

看起来超级简单呢,其实贼吉尔麻烦。

要用ListView应该做到的三点:

  1. 创建item的xml文件,用于显示每条item长啥样。
  2. 创建数据适配器,用于连接数据和ListView, 其中对getView函数的重写尤为重要,待会详细讲解
  3. 最后当然是数据啦,这个数据可以直接赋值给数组,也可以从数据库中获取。

第一点略过不讲,这个自主设计即可。

讲讲第二第三点。

首先你得重写适配器类 - -劝退了萌新的我有没有!

public class MyAdapter extends BaseAdapter {

    public List 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

你可能感兴趣的:(android开发)