在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方法:

@Overridepublic @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里面显示的内容 返回想要显示信息的字段即可

 

QQ  643200732

更多相关文章

  1. android 调用系统相机或者系统相册功能时,onActivityResult方法不
  2. andorid中Html.fromHtml方法
  3. Android禁止横屏竖屏切换的有效方法
  4. 知识梳理:Android子线程中更新UI的3种方法
  5. android中判断当前运行activity名的方法
  6. 葵花宝典之普及篇 —— HD2 android 各种直刷方法

随机推荐

  1. android的AndroidManifest.xml文件介绍
  2. Android 代码获取手机ip地址(个人笔记)
  3. Android 开发中,pullToRefreshListView
  4. Android(安卓)Material Design-Maintaini
  5. viewpager切换添加动画效果viewpager切换
  6. 转-Android之PreferenceActivity
  7. Android:获取网页源代码
  8. 7788
  9. Android 首页双击返回桌面
  10. android中socket编程