将不同的图像添加到我的适配器并在 ListView 中显示它们
Add different Images to my Adapter and show them in ListView
我是 android 的新手,我的问题是:
我正在制作一个 android 应用程序,其中我有一个 RadioGroup
和两个 Radiobutton
btnA 和 btnB 以及一些其他参数。
如果选中 btnA,则数据库中的值为 1,如果选择 btnB,则数据库中的值为 0。
我在显示我的 Listview
.
时从数据库中检索数据
现在我的问题是我想用 listItem 显示 Listview
,例如:
imgA 如果来自数据库的值为 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;
}
}
我的问题是我为所有列表项获取相同的图像。
但我想要 btnA 的 ImgA 和 btnB 的 imgB。
如何解决???
获取一个 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]);
您的代码存在逻辑错误。
我找到了这个问题的解决方案
我所做的是:我使用 Integer Arraylist 来存储我的图像
在我的主目录中 Activity:
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 Array 更改为 Integer Arraylist for Image
这解决了我的问题
我是 android 的新手,我的问题是:
我正在制作一个 android 应用程序,其中我有一个 RadioGroup
和两个 Radiobutton
btnA 和 btnB 以及一些其他参数。
如果选中 btnA,则数据库中的值为 1,如果选择 btnB,则数据库中的值为 0。
我在显示我的 Listview
.
现在我的问题是我想用 listItem 显示 Listview
,例如:
imgA 如果来自数据库的值为 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;
}
}
我的问题是我为所有列表项获取相同的图像。 但我想要 btnA 的 ImgA 和 btnB 的 imgB。 如何解决???
获取一个 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]);
您的代码存在逻辑错误。
我找到了这个问题的解决方案
我所做的是:我使用 Integer Arraylist 来存储我的图像
在我的主目录中 Activity:
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 Array 更改为 Integer Arraylist for Image
这解决了我的问题