适配器如何为Android中的按钮分配背景图像?

适配器如何为Android中的按钮分配背景图像?,android,listview,button,adapter,Android,Listview,Button,Adapter,我正试图想出一种方法,我的适配器基于解析数据,可以将背景图像分配给ListView中按行放置的按钮。 我的应用程序所做的是从服务器下载json数据。然后对其进行解析并用于加载适配器,该适配器显示待执行/已完成任务的列表。每个任务旁边都有一个按钮,指示任务是否已完成。非常感谢任何指点。谢谢。假设您知道如何获取和解析json数据,创建具有所需文本和图像的项目布局的列表视图,请使用以下异常创建自定义适配器 在getView(…)中创建每个视图期间,将所需的图像传递到适配器运行时。 每次刷新适配器数据时

我正试图想出一种方法,我的适配器基于解析数据,可以将背景图像分配给ListView中按行放置的按钮。
我的应用程序所做的是从服务器下载json数据。然后对其进行解析并用于加载适配器,该适配器显示待执行/已完成任务的列表。每个任务旁边都有一个按钮,指示任务是否已完成。非常感谢任何指点。谢谢。

假设您知道如何获取和解析json数据,创建具有所需文本和图像的项目布局的列表视图,请使用以下异常创建自定义适配器

getView(…)
中创建每个视图期间,将所需的图像传递到适配器运行时。 每次刷新适配器数据时,调用adapter.notifyDataSetChanged()

公共类MyAdapter扩展了ArrayAdapter{
私有ArrayList项;
私人持票人;
私有类视窗持有者{
文本视图标题、成本;
按钮删除;
}
公共MyAdapter(上下文上下文、int-tvResId、ArrayList项){
超级(上下文、TVRID、项目);
这个项目=项目;
}
@凌驾
公共视图getView(int pos、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
LayoutInflater vi=(LayoutInflater)getActivity()
.getSystemService(上下文布局\充气机\服务);
v=vi.充气(R.布局.成本\估算\列表\项目,空);
Holder=新的ViewHolder();
Holder.title=(TextView)v.findViewById(R.id.tvCEListText);
Holder.cost=(TextView)v.findViewById(R.id.tvCEListPrice);
Holder.delete=(按钮)v.findViewById(R.id.bCEListDelBtn);
v、 setTag(支架);
}否则
Holder=(ViewHolder)v.getTag();
最终项目=项目。获取(pos);
如果(项!=null){
Holder.title.setText(item.getTitle());
Holder.cost.setText(“Rs.”+item.getPrice());
}
Holder.delete.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
项目。移除(项目);
notifyDataSetChanged();
updateTotal();
}
});
返回v;
}
}
类项目{
私有字符串标题、价格;
公共字符串getTitle(){
返回标题;
}
公共字符串getPrice(){
退货价格;
}
公共项(字符串t、字符串p){
title=t;
价格=p;
}
}

如果您在这方面还需要帮助,请告诉我。

请参阅此处-非常感谢您的帮助,Ravs。我想我完全明白上面的代码是如何工作的,我正在尝试实现它。我正在努力解决的是如何使它与SimpleAdapter一起工作,因为我不确定ArrayAdapter的现有构造函数是否可以接受我传递的所有参数。下面是表示这一部分的代码:ListAdapter=new SimpleAdapter(这是myHabitsList,R.layout.my_habits_list_项,新字符串[]{TAG_TITLE,TAG_habits_ID},new int[]{R.ID.TITLE,R.ID.habits_ID});您可以始终使用全局变量并在主类文件中创建适配器类。这样,就可以避免通过args传递每个var
   public class MyAdapter extends ArrayAdapter<Item> {

    private ArrayList<Item> items;
    private ViewHolder Holder;

    private class ViewHolder {
        TextView title, cost;
        Button delete;
    }

    public MyAdapter(Context context, int tvResId, ArrayList<Item> items) {
        super(context, tvResId, items);
        this.items = items;
    }

    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        View v = convertView;

        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getActivity()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.cost_estimate_list_item, null);

            Holder = new ViewHolder();
            Holder.title = (TextView) v.findViewById(R.id.tvCEListText);
            Holder.cost = (TextView) v.findViewById(R.id.tvCEListPrice);
            Holder.delete = (Button) v.findViewById(R.id.bCEListDelBtn);

            v.setTag(Holder);

        } else
            Holder = (ViewHolder) v.getTag();

        final Item item = items.get(pos);

        if (item != null) {
            Holder.title.setText(item.getTitle());
            Holder.cost.setText("Rs." + item.getPrice());
        }
        Holder.delete.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                items.remove(item);
                notifyDataSetChanged();
                updateTotal();
            }
        });

        return v;
    }

}

class Item {
    private String title, price;

    public String getTitle() {
        return title;
    }

    public String getPrice() {
        return price;
    }

    public Item(String t, String p) {
        title = t;
        price = p;
    }
}