如何将图像放入listView?

时间:2014-11-14 18:17:10

标签: android xml image listview

我有ListView,但我无法将图像放在上面。 该错误位于Activity_listView的{​​{1}}

错误消息是

holder.image.setImageDrawable(datos[position].getImage());

有什么想法解决这个问题吗?

活动(Activity_listView):

The method setImageDrawable(Drawable) in the type ImageView is not applicable 
for the arguments (ImageView)

使用listView(puntuacion.xml)进行布局的xml内容:

package com.simarro.asteroids;
import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

public class Activity_listView extends ActionBarActivity {

    private ListView lstOpciones;
    ImageView asteroid = (ImageView)findViewById(R.id.img_asteroid);
    private puntuacion[] datos = new puntuacion[] {
            new puntuacion(asteroid,"Pepito Dominguez", "15489"),
            new puntuacion(asteroid,"Pedro Martínez", "16598"),
            new puntuacion(asteroid,"Paco Perez", "16332"),
            new puntuacion(asteroid,"Rosana Fernandez", "18792"),
            new puntuacion(asteroid,"Paco Jones", "960") };

    class AdaptadorTitulares extends ArrayAdapter<puntuacion> {

        Activity context;

        AdaptadorTitulares(Activity context) {
            super(context, R.layout.puntuacion, datos);
            this.context = context;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View item = convertView;
            ViewHolder holder;

            if (item == null) {
                LayoutInflater inflater = context.getLayoutInflater();
                item = inflater.inflate(R.layout.puntuacion, null);

                holder = new ViewHolder();
                holder.image=(ImageView)item.findViewById(R.id.img_asteroid);
                holder.jugador = (TextView) item.findViewById(R.id.LblJugador);
                holder.puntuacion = (TextView) item.findViewById(R.id.LblPuntuacion);

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

            holder.image.setImageDrawable(datos[position].getImage());
            holder.jugador.setText(datos[position].getJugador());
            holder.puntuacion.setText(datos[position].getPuntuacion());

            return (item);
        }
    }

    static class ViewHolder {
        ImageView image;
        TextView jugador;
        TextView puntuacion;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.list_view);

        AdaptadorTitulares adaptador = new AdaptadorTitulares(this);

        lstOpciones = (ListView) findViewById(R.id.LstOpciones);

        //¡FUUUUUUUUU-SIÓN!
        lstOpciones.setAdapter(adaptador);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_list_view, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

布局在哪里是listView(listView.xml):

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:columnCount="3"
    android:orientation="horizontal" >

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

    <TextView
        android:id="@+id/LblJugador"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#ff0"
        android:textSize="30px"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/LblPuntuacion"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="30px"
        android:textStyle="normal" />

</GridLayout>

获取值的类(Puntuacion)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView android:id="@+id/LstOpciones" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" />

</LinearLayout>

1 个答案:

答案 0 :(得分:2)

不是在ImageView中返回getImage(),而是返回Drawable并将其更改为

public Drawable getImage() {
    return image.getDrawable();
}

getDrawable() Docs

正如错误所述,方法setImageDrawable()采用Drawable类型,但您传递的是ImageView