Android 从ListAdapter更改图像

Android 从ListAdapter更改图像,android,listview,Android,Listview,我想使用ListAdapter调用res/drawable文件夹中的图像 到目前为止,我只能检索和显示文本形式的信息 我的适配器如下所示 runOnUiThread(new Runnable() { public void run() { /** * Updating parsed JSON data into ListView * */

我想使用ListAdapter调用res/drawable文件夹中的图像

到目前为止,我只能检索和显示文本形式的信息

我的适配器如下所示

 runOnUiThread(new Runnable() {
                public void run() {
                    /**
                     * Updating parsed JSON data into ListView
                     * */
                    ListAdapter adapter = new SimpleAdapter(
                            ListagemHospitaisActivity.this, ListaHospitais,
                            R.layout.item_hospital, new String[] { TAG_PID,
                            TAG_NOME, TAG_LOTACAO},
                            new int[] { R.id.pid, R.id.nome, R.id.lotacao });

                    // updating listview
                    setListAdapter(adapter);

                }
            });
TAG_LOTACAO返回我想要显示的图像的确切名称

我想改变的ImageView是这样的

 <ImageView
        android:id="@+id/imglotacao"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/l_9_1"
        />

您应该创建自己的自定义适配器,如下所示:

public class HospitaisAdapter extends BaseAdapter {

    private List<Hospitais> ListaHospitais; // or what type this list is
    private Context context;

    private LayoutInflater layoutInflater;

    public HospitaisAdapter (Context context, List<Hospitais> ListaHospitais) {
        this.ListaHospitais= ListaHospitais;
        this.context=context;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return ListaHospitais.size();
    }

    @Override
    public Object getItem(int position) {
        return ListaHospitais.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_row, null);
         /*the row layout should be the layout for a row from your listview,
        containing your  imageView and nome as well as pid data.
        I will suppose pid and nome are Strings and are  displayed in a TextView */

            holder = new ViewHolder();
            holder.pid= (TextView) convertView.findViewById(R.id.pid);
            holder.nome= (TextView) convertView.findViewById(R.id.nome);
            holder.image= (ImageView) convertView.findViewById(R.id.imglotacao);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Hospitais item = (Hospitais) ListaHospitais.get(position);

        holder.pid.setText(item.getPid());
        holder.nome.setText(item.getNome());

        holder.image.setImageDrawable(context.getResources().getDrawable(R.drawable.image_name));


        return convertView;
    }

    static class ViewHolder {
        TextView pid;
        TextView nome;
        ImageView image;

    }
}
listView.setAdapter(new HospitaisAdapter(this,ListaHospitais));

希望这有帮助。

可能重复的抱歉,应该删除另一个。我想这一条更清楚。谢谢你@HaneloreIanoseck。。。我会试试这个,我会让你知道的。我尝试了你的解决方案,但出现了一些错误。我已经用问题编辑了我的问题,这样可以更好地格式化。你应该用ListaHospitais替换listData。我编辑了我的答案。至于列表ListaHospitais,我只是假设类型是这个列表的列表。当然,如果Hospitais类型不存在,它会说您需要创建这个类。您需要将ListaHospitais的类型替换为您在初始代码中使用的类型。
public class HospitaisAdapter extends BaseAdapter {

    private List<Hospitais> ListaHospitais; // or what type this list is
    private Context context;

    private LayoutInflater layoutInflater;

    public HospitaisAdapter (Context context, List<Hospitais> ListaHospitais) {
        this.ListaHospitais= ListaHospitais;
        this.context=context;
        layoutInflater = LayoutInflater.from(context);
    }

    @Override
    public int getCount() {
        return ListaHospitais.size();
    }

    @Override
    public Object getItem(int position) {
        return ListaHospitais.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_row, null);
         /*the row layout should be the layout for a row from your listview,
        containing your  imageView and nome as well as pid data.
        I will suppose pid and nome are Strings and are  displayed in a TextView */

            holder = new ViewHolder();
            holder.pid= (TextView) convertView.findViewById(R.id.pid);
            holder.nome= (TextView) convertView.findViewById(R.id.nome);
            holder.image= (ImageView) convertView.findViewById(R.id.imglotacao);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        Hospitais item = (Hospitais) ListaHospitais.get(position);

        holder.pid.setText(item.getPid());
        holder.nome.setText(item.getNome());

        holder.image.setImageDrawable(context.getResources().getDrawable(R.drawable.image_name));


        return convertView;
    }

    static class ViewHolder {
        TextView pid;
        TextView nome;
        ImageView image;

    }
}
listView.setAdapter(new HospitaisAdapter(this,ListaHospitais));