您的位置:首页 > 移动开发 > Android开发

Android中自定义数据适配器Adapter

2015-08-19 20:36 429 查看
在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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  自定义Adapter