Android在列表中动态设置ImageView
我有一个具有以下布局的列表:Android在列表中动态设置ImageView,android,listview,imageview,simpleadapter,Android,Listview,Imageview,Simpleadapter,我有一个具有以下布局的列表: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/outName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/outSurname"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/outAddress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<TextView
android:id="@+id/outPhone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingTop="6dip"
android:paddingLeft="6dip"
android:textSize="17sp"
android:textStyle="bold" />
<ImageView
android:id="@+id/outPhoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
其中MyList是ArrayList:
ArrayList<HashMap<String, String>> MyList;
MyList = new ArrayList<HashMap<String, String>>();
arraylistmylist;
MyList=新的ArrayList();
我的结果JSONArray的每个字段都由“姓名”、“姓氏”、“地址”、“电话”和“照片”组成。
“photo”是一个数字字段,有4个可能的值(0、1、2、3),其中每个值都表示我在可绘制文件夹中的特定图像。
如何根据此值手动设置ImageView的图像?您需要编写一个适配器。在这个基础上做你自己的
public class ListAdapter extends BaseAdapter{
Context context;
ArrayList<HashMap<String, String>> myList;
public BankAdapter(Context context,ArrayList<HashMap<String, String>> myList){
this.context = context;
this.myList=myList;
}
static class ViewHolder {
// Include Number of reqd views.
private TextView item;
private ImageView pic;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.length;
}
@Override
public Object getItem(int pos) {
// TODO Auto-generated method stub
return items[pos];
}
@Override
public long getItemId(int pos) {
// TODO Auto-generated method stub
String id = items[pos].getId();
return Long.parseLong(id);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder mViewHolder = null;
if(view == null){
mViewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Activity.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listrow,parent,false);
mViewHolder.item = (TextView)view.findViewById(R.id.items_txt);
mViewHolder.pic=(ImageView)view.findViewById(R.id.pics_img)
view.setTag(mViewHolder);
}
else{
mViewHolder = (ViewHolder)view.getTag();
}
mViewHolder.item.setText(myList.get(position).getKey());
if(condition){
//update Image with correct item.
mViewHolder.pic.setDrawable(//getitemfromList);
}
return view;
}
}
公共类ListAdapter扩展了BaseAdapter{
语境;
ArrayList myList;
public BankAdapter(上下文,ArrayList myList){
this.context=上下文;
this.myList=myList;
}
静态类视窗夹{
//包括所需视图的数量。
私有文本视图项;
私人图像视图pic;
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回项目。长度;
}
@凌驾
公共对象getItem(int-pos){
//TODO自动生成的方法存根
退货项目[pos];
}
@凌驾
公共长getItemId(int-pos){
//TODO自动生成的方法存根
字符串id=items[pos].getId();
返回Long.parseLong(id);
}
@凌驾
公共视图getView(内部位置、视图视图、视图组父视图){
//TODO自动生成的方法存根
ViewHolder mViewHolder=null;
如果(视图==null){
mViewHolder=新的视图持有者();
LayoutInflater充气器=(LayoutInflater)context.getSystemService
(活动、布局、充气机和服务);
视图=充气机。充气(R.layout.listrow,父级,false);
mViewHolder.item=(TextView)view.findViewById(R.id.items_txt);
mViewHolder.pic=(ImageView)view.findViewById(R.id.pics\u img)
view.setTag(mViewHolder);
}
否则{
mViewHolder=(ViewHolder)view.getTag();
}
mViewHolder.item.setText(myList.get(position.getKey());
如果(条件){
//使用正确的项目更新图像。
mViewHolder.pic.setDrawable(//getitemfromList);
}
返回视图;
}
}
已在UI线程上执行onPostExecute()
。无需将代码包装在runOnUiThread()
中。请注意,当调用onPostExecute()
时,您的活动可能会停止/销毁。我认为这类似于从R中通过id检索ImageView,然后调用setBackground(drawable)。Drawable是一种资源,您也可以通过findById从R.@LJoosse检索。我有一个主类,在其中调用(MyClass().execute();)另一个类扩展了由onPreExecute()、doInBackground(字符串…args)和onPostExecute(字符串文件\ url)组成的AsyncTask。我一直认为这是最好的方法。我可以用另一种方式吗?user3427079我花了很多时间想一种不用适配器的方法,但我从来没有找到解决方案。谢谢,在这一点上,我认为实现适配器是唯一的方法。我写我自己的适配器,无论如何,我不知道当我执行我的应用程序时,列表是空的。这是我的适配器:没关系。我发现了自己的错误。
public class ListAdapter extends BaseAdapter{
Context context;
ArrayList<HashMap<String, String>> myList;
public BankAdapter(Context context,ArrayList<HashMap<String, String>> myList){
this.context = context;
this.myList=myList;
}
static class ViewHolder {
// Include Number of reqd views.
private TextView item;
private ImageView pic;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return items.length;
}
@Override
public Object getItem(int pos) {
// TODO Auto-generated method stub
return items[pos];
}
@Override
public long getItemId(int pos) {
// TODO Auto-generated method stub
String id = items[pos].getId();
return Long.parseLong(id);
}
@Override
public View getView(int position, View view, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder mViewHolder = null;
if(view == null){
mViewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService
(Activity.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.listrow,parent,false);
mViewHolder.item = (TextView)view.findViewById(R.id.items_txt);
mViewHolder.pic=(ImageView)view.findViewById(R.id.pics_img)
view.setTag(mViewHolder);
}
else{
mViewHolder = (ViewHolder)view.getTag();
}
mViewHolder.item.setText(myList.get(position).getKey());
if(condition){
//update Image with correct item.
mViewHolder.pic.setDrawable(//getitemfromList);
}
return view;
}
}