2014-11-14 50 views
0

我有一个ListView但我不能把图像放在上面。 的错误是在Activity_listViewholder.image.setImageDrawable(datos[position].getImage()); 我怎样才能把图像放在listView中?

的错误消息是

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

任何想法解决这个问题?

活性(Activity_listView):

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(puntuacion.xml)的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> 

的布局,其中是列表视图(listView.xml):

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

获得值的类(Puntuacion)

package com.simarro.asteroids; 

import android.graphics.drawable.Drawable; 
import android.widget.ImageView; 

public class puntuacion 
{ 
    private ImageView image; 
    private String jugador; 
    private String puntuacion; 

    public puntuacion(ImageView img, String tit, String sub){ 
     image=img; 
     puntuacion = sub; 
     jugador = tit; 
    } 

    public ImageView getImage(){ 
     return image; 
    } 

    public String getJugador(){ 
     return jugador; 
    } 

    public String getPuntuacion(){ 
     return puntuacion; 
    } 
} 

回答

2

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

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

getDrawable() Docs

由于错误说,setImageDrawable()需要Drawable型的方法,但你传递一个ImageView

+0

然后,在Activity_listView的puntuacion实例中,改为小行星,我应该使用什么格式?一个字符串,如“drawable/asteroid”来访问图像? – 2014-11-14 18:47:26

+0

我不太确定我明白... – codeMagic 2014-11-14 18:56:11

+0

在Activity_listView中我有一个puntuacion的实例。第一个参数实际上是一个ImageView。当从ImageView的puntuacion.java中将构造函数的第一个参数更改为Drawable时,此实例需要将第一个参数设置为Drawable类型。 ImageView asteroid =(ImageView)findViewById(R.id.img_asteroid);新的puntuacion [小行星,“Pepito Dominguez”,“15489”), 这个想法后来,将小行星替换为一些Drawable。 Drawable将如何?对不起,我的英文很糟糕。 – 2014-11-14 19:04:54

相关问题