博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 使用ArrayAdapter 加载Bean数据
阅读量:6319 次
发布时间:2019-06-22

本文共 2194 字,大约阅读时间需要 7 分钟。

在Android中 我们经常使用到ListView GridView RecyclerView,Adapter 通常是继承自BaseAdapter/RecyclerView.Adapter

但开发中也可能需要展示的数据只有一个标题或者属性,自定义Adapter显得有些囊肿,但ArrayAdaprer 很多资料都是使用ArrayList 进行数据描述,但这样可扩展性很差

下面教大家如何正确使用ArrayAdapter private ArrayList<? extends T> mDatas;

if (mDatas != null && !mDatas.isEmpty()) { mListView.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, mDatas)); } 如果我们这样使用自定义的Bean类 会输出对象的信息

这不是我们要的

但有什么方法呢 我们看一下源码

getView方法: @Override public @NonNull View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { return createViewFromResource(mInflater, position, convertView, parent, mResource); } 这是具体的实现 首先查找这个TextView 进行缓存 private @NonNull View createViewFromResource(@NonNull LayoutInflater inflater, int position, @Nullable View convertView, @NonNull ViewGroup parent, int resource) { final View view; final TextView text;

if (convertView == null) {    view = inflater.inflate(resource, parent, false);} else {    view = convertView;}try {    if (mFieldId == 0) {        //  If no custom field is assigned, assume the whole resource is a TextView        text = (TextView) view;    } else {        //  Otherwise, find the TextView field within the layout        text = view.findViewById(mFieldId);        if (text == null) {            throw new RuntimeException("Failed to find view with ID "                    + mContext.getResources().getResourceName(mFieldId)                    + " in item layout");        }    }} catch (ClassCastException e) {    Log.e("ArrayAdapter", "You must supply a resource ID for a TextView");    throw new IllegalStateException(            "ArrayAdapter requires the resource ID to be a TextView", e);}final T item = getItem(position);复制代码

如果传递过来的对象是CharSequence or String 类型 就直接设置文本 if (item instanceof CharSequence) { text.setText((CharSequence) item); } else { 否则就设置对象的toString方法 text.setText(item.toString()); }

return view;复制代码

} 看到这 是否恍然大悟了呢 如果传递过来的对象就是该对象的toString

但我们一般Bean类都不会复写toStirng方法 而是调用Object 默认是对象的hash值

但我们可以复写toString()方法来正确使用

也就是实体类中 重写toString()方法 返回我们想要的字段 比如 name , type

这个toString()返回的就是我们想要在ArrayAdapter里面显示的内容 返回想要显示信息的字段即可

转载于:https://juejin.im/post/5c773ff7f265da2de80f7537

你可能感兴趣的文章
Python编程语言
查看>>
十四、转到 linux
查看>>
Got error 241 'Invalid schema
查看>>
ReferenceError: event is not defined
查看>>
男人要内在美,更要外在美
查看>>
为什么要跟别人比?
查看>>
app启动白屏
查看>>
Oracle 提高查询性能(基础)
查看>>
学习知识应该像织网一样去学习——“网状学习法”
查看>>
Hadoop集群完全分布式安装
查看>>
QString,char,string之间赋值
查看>>
我的友情链接
查看>>
Nginx+mysql+php-fpm负载均衡配置实例
查看>>
MySql之基于ssl安全连接的主从复制
查看>>
informix的逻辑日志和物理日志分析
查看>>
VMware.Workstation Linux与windows实现文件夹共享
查看>>
ARM inlinehook小结
查看>>
wordpress admin https + nginx反向代理配置
查看>>
管理/var/spool/clientmqueue/下的大文件
查看>>
mysql dba系统学习(20)mysql存储引擎MyISAM
查看>>