Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android在列表中动态设置ImageView_Android_Listview_Imageview_Simpleadapter - Fatal编程技术网

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;
        }

    }