android开发在adapter中使用反射添加元素
android开发中最常用的控件之一就是listview,伴随listview还要有adapter和放入适配器的item.然后假设其中有一部分item的生成符合一定规律,Item item = new Item(jsonObject);那么就该考虑下用反射来生成这些元素了.
首先是item的代码
public class TestItem {
public int id;
public String image;
public TestItem(JSONObject json) {
try {
id = json.getInt("id");
} catch (JSONException e1) {
e1.printStackTrace();
}
try {
image = json.getString("image");
} catch (JSONException e) {
e.printStackTrace();
}
}
}
然后是生成一个item对象的代码
Object object = TestItem.class.getConstructors()[0].newInstance(json);
放入adapter之后就是
/**
* 适配器的抽象类
*
* @author oldfeel
*/
public abstract class BaseBaseAdapter extends BaseAdapter {
private List<Object> list = new LinkedList<Object>();
/** 适配器中元素的类 */
private Class<?> classItem; /**
*
* @param context
* @param classItem
* 适配器中元素的类
*/
public BaseBaseAdapter(Class<?> classItem) {
this.classItem = classItem;
} /**
* 预处理清除列表数据和获取jsonarray
*
* @param page
* 页码
* @param json
* json对象
* @throws JSONException
*/
public void putJSON(JSONObject json, int page) {
if (page == 1) {
list.clear();
}
try {
JSONArray array = json.getJSONArray("adimage");
for (int i = 0; i < array.length(); i++) {
try {
Object object = classItem.getConstructors()[0]
.newInstance(array.getJSONObject(i));
addItem(object);
} catch (Exception e) {
e.printStackTrace();
}
}
} catch (JSONException e1) {
e1.printStackTrace();
}
} /**
* 清除list
*/
public void clear() {
list.clear();
notifyDataSetChanged();
} /**
* 添加元素
*
* @param object
*/
public void addItem(Object object) {
list.add(object);
notifyDataSetChanged();
} @Override
public int getCount() {
return list.size();
} @Override
public Object getItem(int position) {
if (position > list.size() - 1) {
return null;
}
return list.get(position);
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
return getExView(position, convertView, parent);
} public abstract View getExView(int position, View convertView,
ViewGroup parent); }
在使用adapter的时候继承BaseBaseAdapter并输入item的类和布局文件就可以了
例如
BaseBaseAdapter adapter = new BaseBaseAdapter(
TestItem.class) { @Override
public View getExView(int position, View convertView,
ViewGroup parent) {
TestItem item = (TestItem) getItem(position);
TextView textView = new TextView(MainActivity.this);
textView.setText(item.image);
return textView;
}
};
android开发在adapter中使用反射添加元素的更多相关文章
- [原]Android开发优化-Adapter优化
ListView作为Android开发中使用频率最高的一个控件,保证ListView的流畅运行,对用户体验的提高至关重要.Adapter是ListView和数据源之间的中间人,当每条数据进入可见区时, ...
- Android开发——异步任务中Activity销毁时的问题
0. 前言 在Android开发中经常会发生Activity的销毁重建,比如用户长时间接听一个电话后回到APP.在Android开发--Fragment知识整理(二)中我们提到了使用Fragment ...
- Android开发:Eclipse中SqliteManager插件使用
通常开发Android的时候要使用到数据库操作,会遇到下面小问题: 数据库文件在哪?怎样訪问或操作? 能够通过:打开DDMS->File Explorer看到的sqlite数据库在eclipse ...
- Android开发-解决 AIDL 中找不到couldn't find import for class错误
最近在使用AIDL做IPC的时候,在处理复杂的数据类型的时候,编译器总是报couldn't find import for class错误,所以在这里总结下AIDL使用的时候的一些注意事项,希望对你能 ...
- Android开发 解决AlertDialog中的EditText无法调出输入法的问题
在AlertDialog中使用自定义的View,如果View中有EditText,在上面点击,默认是跳不出软键盘的,不是焦点的问题.解决方法,有两种,一是把AlertDialog换成Dialog,但这 ...
- Android开发(24)---安卓中实现多线程下载(带进度条和百分比)
当我们学完java中多线程的下载后,可以将它移植到我们的安卓中来,下面是具体实现源码: DownActivity.java package com.example.downloads; import ...
- android开发(41) Fragment中使用POP_BACK_STACK_INCLUSIVE达到一次跳转到栈底。类似Activity的 采用FLAG_ACTIVITY_CLEAR_TOP
需求场景: 在开发中遇到下面这样场景: 1.创建 Fragment A 显示. 这时栈的结构是: .Fragment A 2.创建 Fragment B 并 显示. 从下到上看,这时栈的结构是: ...
- Android 开发权限设置中英对照说明详解
android.permission.ACCESS_CHECKIN_PROPERTIES 允许读写访问 "properties"表在checkin数据库中,改值可以修改上传( Al ...
- Android开发 获取视频中的信息(例如预览图或视频时长) MediaMetadataRetriever媒体元数据检索器
前言 在Android里获取视频的信息主要依靠MediaMetadataRetriever实现 获取最佳视频预览图 所谓的最佳就是MediaMetadataRetriever自己计算的 /** * 获 ...
随机推荐
- angular js 实例参数学习
<!DOCTYPE html> <html> <head> <meta name="description" content=" ...
- Java [leetcode 5] Longest Palindromic Substring
问题描述: Given a string S, find the longest palindromic substring in S. You may assume that the maximum ...
- Chrome 实用调试技巧
Chrome 实用调试技巧 2016-07-23 如今Chrome浏览器无疑是最受前端青睐的工具,原因除了界面简洁.大量的应用插件,良好的代码规范支持.强大的V8解释器之外,还因为Chrome开发者工 ...
- POJ 1401 Factorial
题意:求一个数的阶乘最后边有几个0. 解法:如果有0说明这个数含有2和5这两个因子,对于一个阶乘来说因子2的数量一定比5的数量多,所以只要算有几个5就可以了,依次算5的个数,25的个数,125的个数… ...
- MyBatis的association示例——MyBatis学习笔记之三
前两篇博文介绍的都是单表映射,而实际上很多时候我们需要用到较复杂的映射.今天学会的association的用法,就是一例,现写出来和大家分享(为简洁起见,ant工程中各文件.目录的布局,以及其它与前面 ...
- HDU 3695-Computer Virus on Planet Pandora(ac自动机)
题意: 给一个母串和多个模式串,求模式串在母串后翻转后的母串出现次数的的总和. 分析: 模板题 /*#include <cstdio> #include <cstring> # ...
- canvas 模拟小球上抛运动的物理效果
最近一直想用学的canvas做一个漂亮的小应用,但是,发现事情并不是想的那么简单.比如,游戏的逼真效果,需要自己来coding…… 所以,自己又先做了一个小demo,算是体验一下亲手打造物理引擎的感觉 ...
- jedis入门实例
在使用传统的关系数据库,我们都需要依赖一个所谓的实现了jdbc规范的驱动程序来连接数据库,这些驱动程序由各大数据库厂商提供.这些驱动就是jar包,里面就是封装了对数据库的通信协议,我们通过简单的调用就 ...
- python学习之random模块
Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...
- storm,hbase和storm-kafka-0.8-plus兼容性问题
1 org.slf4j.impl.StaticLoggerBinder.SINGLETON错误 方案: 确保slf4j-api-1.5.6.jar 和slf4j-log4j12-1.5.6.jar ...