将不同的图像添加到我的适配器并在ListView中显示它们

时间:2016-05-02 11:40:13

标签: android listview android-radiogroup android-radiobutton

我是android的新手。我的问题是:

我正在创建一个Android应用程序,其中我有一个RadioGroup,其中有两个Radiobutton btnA和btnB以及其他一些参数。 如果检查btnA,则数据库中的值为1,如果选择了btnB,则数据库中的值为0。 我正在从数据库中检索数据,同时显示我的Listview

现在我的问题是我想用listItem显示Listview,如:

imgA,如果Value From Database为1。

imgB如果数据库中的值为0。

怎么做???

我试过这个

private Integer[] Images = {R.drawable.imgA,R.drawable.imgB};
Cursor cur = dop.getData();
if(cur!= null && cur.getCount()>0)
{
  if(cur.moveToFirst()){
     do {Integer btnType= cur.getInt(cur.getColumnIndex(databaseName.TableName.ColumnName));
                    if(btnType== 1){ImageId = Images[0];}
                    else if(btnType== 0){ImageId= Images[1];}}
          //other Params
  }while (cur.moveToNext());

}
Adapter myAdp = new Adapter(Activity.this,ImageId,para);
myList.setAdapter(myAdp);

我的适配器就像

    public class Adapter extends BaseAdapter {

    public Context context;
    public ArrayList<String>Param1;
    public int ImageId;

    public Adapter(Context context,int ImageId,ArrayList<String>Param1)
    {
        this.context = context;
        this.ImageId = ImageId;
        this.Param1= Param1;

    }
    public int getCount(){return param1.size();}
    public Object getItem(int Position){return null;}
    public long getItemId(int Position){return 0;}
    public class viewHolder{
        TextView tvParam1;
        ImageView imgType;

    }
    @Override
    public View getView(int Position,View Child,ViewGroup Parent)
    {
        viewHolder vHolder;
        LayoutInflater inflator;
        if(Child == null)
        {
            inflator = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            Child = inflator.inflate(R.layout.list_row,null);
            vHolder = new viewHolder();
            vHolder.tvparam1 = (TextView)Child.findViewById(R.id.txtParam1);
            vHolder.imgType = (ImageView)Child.findViewById(R.id.imgType);
            Child.setTag(vHolder);
        }
        else {vHolder = (viewHolder)Child.getTag();}
        vHolder.tvParam1.setText(Param1.get(Position));                 
        vHolder.imgType.setImageResource(ImageId);
        return Child;
    }

}

我的问题是我为所有列表项获取相同的图像。 但是我希望ImgA用于btnA而imgB用于btnB。 如何解决这个???

2 个答案:

答案 0 :(得分:2)

我找到了解决这个问题的方法

我所做的是:我使用Integer Arraylist来存储我的图像

在我的主要活动中:

public int[] Images = {R.drawable.imgA,R.drawable.imgB};
public ArrayList<Integer>ImageId = new ArrayList<Integer>();
int i = 0;

if(cur.moveToFirst()){
      if(btnType == 1)
                {
                    ImageId.add(Images[0]);
                }
                else if(btnType == 0)
                {
                    ImageId.add(Images[1]);
                }   
       } while(cur.moveToNext());

也在myAdapter中:我将整数数组更改为Integer Arraylist for Image

这解决了我的问题

答案 1 :(得分:1)

取一个ImageId数组,并将该数组中的id保存在特定位置。

int i = 0;

if(cur.moveToFirst()){
    do {Integer btnType= cur.getInt(cur.getColumnIndex(databaseName.TableName.ColumnName));
        if(btnType== 1){ImageId[i] = Images[0];}
        else if(btnType== 0){ImageId[i] = Images[1];}}

        i++;
} while(cur.moveToNext());

现在你的适配器里面加载像这样的图像

vHolder.imgType.setImageResource(ImageId[Position]);

您的代码中存在逻辑错误。