首页 > 其他分享 >Android中ListView的使用以及使用适配器设置数据源

Android中ListView的使用以及使用适配器设置数据源

时间:2023-03-23 11:07:15浏览次数:58  
标签:return String 数据源 适配器 private rowsBeanList import Android public


之前讲过使用适配器给RecycleView进行设置数据源,可能对于新手不是很友好。

如果只是想简单的在页面中显示一个对象list的某属性值怎样使用适配器给listView设置数据源。

注:

关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

首先在布局文件中添加一个ListView组件

<ListView
        android:id="@+id/lv_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

然后再新建一个Bean用来存储数据对象。

package com.badao.badaoimclient.bean;
import android.support.annotation.NonNull;

import java.util.List;
public class ChatBean {
    
    private String msg;
    private int code;

    @NonNull
    private String id = "";

    private List<ChatItem> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public List<ChatItem> getData() {
        return data;
    }

    public void setData(List<ChatItem> data) {
        this.data = data;
    }

    @NonNull
    public String getId() {
        return id;
    }

    public void setId(@NonNull String id) {
        this.id = id;
    }


    public static class ChatItem {

        private int id;
        private String msgNum;
        private String content;
        //语音消息服务器地址
        private String remoteContent;
        private String sender;
        private String receiver;
        private String type;
        private boolean canReceived;
        private String sendTime;
        private String receivedTime;
        //语音时长
        private int voiceDuration;
        private boolean isRead;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getMsgNum() {
            return msgNum;
        }

        public void setMsgNum(String msgNum) {
            this.msgNum = msgNum;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        public String getSender() {
            return sender;
        }

        public void setSender(String sender) {
            this.sender = sender;
        }

        public String getReceiver() {
            return receiver;
        }

        public void setReceiver(String receiver) {
            this.receiver = receiver;
        }

        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        public boolean isCanReceived() {
            return canReceived;
        }

        public void setCanReceived(boolean canReceived) {
            this.canReceived = canReceived;
        }

        public String getSendTime() {
            return sendTime;
        }

        public void setSendTime(String sendTime) {
            this.sendTime = sendTime;
        }

        public String getReceivedTime() {
            return receivedTime;
        }

        public void setReceivedTime(String receivedTime) {
            this.receivedTime = receivedTime;
        }

        public int getVoiceDuration() {
            return voiceDuration;
        }

        public void setVoiceDuration(int voiceDuration) {
            this.voiceDuration = voiceDuration;
        }

        public String getRemoteContent() {
            return remoteContent;
        }

        public void setRemoteContent(String remoteContent) {
            this.remoteContent = remoteContent;
        }

        public boolean isRead() {
            return isRead;
        }

        public void setRead(boolean read) {
            isRead = read;
        }
    }

}

具体要使用的字段根据自己的需要。

然后在listview所在布局文件对应的activity中

首先先定义一个内部类的适配器

privateMyAdapter myAdapter;

适配器的声明在activity的内部类中声明

/**
     * 定义一个适配器
     */
    private class MyAdapter extends BaseAdapter {

        private List<ImUserBean.RowsBean> rowsBeanList ;

        public MyAdapter(List<ImUserBean.RowsBean> rowsBeanList){
            this.rowsBeanList = rowsBeanList;
        }
        // 返回需要显示的条目数
        @Override
        public int getCount() {
            return rowsBeanList==null?0:rowsBeanList.size();
        }

        @Override
        public Object getItem(int position) {
            return rowsBeanList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        /**
         * 获取一个View用来显示ListView的数据,会作为ListView的一个条目显示
         * @param position 当前需要显示的View的索引
         * @param convertView 或存数据的对象
         * @param parent
         * @return 返回需要显示的View
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView textView = new TextView(AddressBookActivity.this);
            //设置每一项显示的内容
            textView.setText(rowsBeanList.get(position).getImNumX()+"-----"+((int)rowsBeanList.get(position).getCanOnlineX()==1?"在线":"不在线"));
            //设置每一项的点击事件
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(AddressBookActivity.this,SendMessageActivity.class);
                    intent.putExtra("imnum",rowsBeanList.get(position).getImNumX());
                    startActivity(intent);
                }
            });
            return textView;
        }
    }

使适配器扩展自BaseAdapter并重写其方法,在内部类中

 

声明数据源的实体bean的list,然后在内部类适配器的构造方法中对其进行赋值。

在getCount方法中设置显示的条目数为数据源的长度。

在getItem中设置每一项为数据源对应下标的每一项。

在getView中设置一个视图textView来显示listView的数据,它将作为ListView的一个条目进行显示。

并且还可以设置每一项的显示的文本内容和点击事件。

然后在onCreate方法中异步调用接口获取数据源,并通过适配器的构造方法给

适配器中的数据源赋值。

然后给通过id获取到的listView设置适配器。

activity完整代码:

package com.badao.badaoimclient.view;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import com.badao.badaoimclient.R;
import com.badao.badaoimclient.bean.ImUserBean;
import com.badao.badaoimclient.web.WebClient;

import java.io.IOException;
import java.util.List;

import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;

public class AddressBookActivity extends AppCompatActivity {


    private ListView listView;
    private List<ImUserBean.RowsBean> rowsBeanList;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_address_book);
        listView = findViewById(R.id.lv_list);
        //异步请求通讯录
        WebClient.getInstance().getImUserList().enqueue(new Callback<ImUserBean>() {
            @Override
            public void onResponse(Call<ImUserBean> call, Response<ImUserBean> response) {
                Log.i("response",response.toString());
                if(response.code()==200) {
                    ImUserBean userBean = response.body();
                    rowsBeanList = userBean.getRows();
                    myAdapter = new MyAdapter(rowsBeanList);
                    listView.setAdapter(myAdapter);

                }
            }

            @Override
            public void onFailure(Call<ImUserBean> call, Throwable t) {
                Log.i("onFailure",t.toString());
            }
        });

    }

    /**
     * 定义一个适配器
     */
    private class MyAdapter extends BaseAdapter {

        private List<ImUserBean.RowsBean> rowsBeanList ;

        public MyAdapter(List<ImUserBean.RowsBean> rowsBeanList){
            this.rowsBeanList = rowsBeanList;
        }
        // 返回需要显示的条目数
        @Override
        public int getCount() {
            return rowsBeanList==null?0:rowsBeanList.size();
        }

        @Override
        public Object getItem(int position) {
            return rowsBeanList.get(position);
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        /**
         * 获取一个View用来显示ListView的数据,会作为ListView的一个条目显示
         * @param position 当前需要显示的View的索引
         * @param convertView 或存数据的对象
         * @param parent
         * @return 返回需要显示的View
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView textView = new TextView(AddressBookActivity.this);
            //设置每一项显示的内容
            textView.setText(rowsBeanList.get(position).getImNumX()+"-----"+((int)rowsBeanList.get(position).getCanOnlineX()==1?"在线":"不在线"));
            //设置每一项的点击事件
            textView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(AddressBookActivity.this,SendMessageActivity.class);
                    intent.putExtra("imnum",rowsBeanList.get(position).getImNumX());
                    startActivity(intent);
                }
            });
            return textView;
        }
    }
}

 

标签:return,String,数据源,适配器,private,rowsBeanList,import,Android,public
From: https://blog.51cto.com/BADAOLIUMANGQZ/6144494

相关文章