Android中自定义数据适配器Adapter

在Android项目中我们经常会用ListView设置适配器,但是Android提供的现成的适配器功能有限,并且只能对单行进行事件响应,那么我们完全可以根据自己的需求定义自己的适配器,本人最近总结了自定义适配器Adapter的方法,如有不妥的地方还望各位大神不吝赐教,谢谢!

方法一如下:

定义一个MyAdapter类并继承BaseAdapter基类,并在MyAdapter类中定义如下属性:

1.先要定义当前上下文Context 对象

2.定义需要封装的数据对象,(数据类型可以有多种,比如集合Map,列表List,JSONArray,JSONObject等)

3.其他需要用到的属性

举例如下:

public class MyAdapter extends BaseAdapter
{

        //当前对象
private Context ctx;     
// 定义需要包装的JSONArray对象,该数据对象可以是其他类型比如Map对象
private JSONArray jsonArray;
// 定义列表项显示JSONObject对象的哪个属性
private String property;
private boolean hasIcon;

        //实现有参构造函数,该构造函数是必须实现的
public MyAdapter (Context ctx
, JSONArray jsonArray, String property
, boolean hasIcon)
{
this.ctx = ctx;
this.jsonArray = jsonArray;
this.property = property;
this.hasIcon = hasIcon;
}

       //实现抽象类中定义的抽象方法
@Override
public int getCount()
{
return jsonArray.length();
}


@Override
public Object getItem(int position)
{
return jsonArray.optJSONObject(position);
}


@Override
public long getItemId(int position)
{
try
{
// 返回物品的ID
return ((JSONObject)getItem(position)).getInt("id");
}
catch (JSONException e)
{
e.printStackTrace();
}
return 0;
}

        //该方法时关键,将返回一个ListView每行显示的视图样式
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
// 定义一个线性布局管理器
LinearLayout linear = new LinearLayout(ctx);
// 设置为水平的线性布局管理器
linear.setOrientation(0);
// 创建一个ImageView
ImageView iv = new ImageView(ctx);
iv.setPadding(10, 0, 20, 0);
iv.setImageResource(R.drawable.item);
// 将图片添加到LinearLayout中
linear.addView(iv);
// 创建一个TextView
TextView tv = new TextView(ctx);
try
{
// 获取JSONArray数组元素的property属性
String itemName = ((JSONObject)getItem(position))
.getString(property);
// 设置TextView所显示的内容
tv.setText(itemName);
}
catch (JSONException e)
{
e.printStackTrace();
}


tv.setTextSize(20);
if (hasIcon)
{
// 将TextView添加到LinearLayout中
linear.addView(tv);
return linear;
}
else
{
return tv;
}

}
}

方法二如下:

方法二其他部分与方法一没有差别,不同之处在于将方法一中getView(int position, View convertView, ViewGroup parent)中的红色字体部分,也就是自定义的ListView中每行显示的样式实现定义成一个资源布局文件item_veiw.xml再通过如下代码实现:

LinearLayout linear = new LinearLayout(ctx);
linear.setOrientation(0);

LayoutInflater  listContainer = LayoutInflater.from(context);

myView = listContainer.inflate(R.layout.item_veiw, null)

linear.addView(myView);

return linear;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值