2011-09-12 27 views
15

Tengo algunos problemas para mostrar mi listview en una sencilla aplicación que estoy escribiendo. Por alguna razón, el método getView() de mi clase de adaptador no se está llamando. Sin embargo, cuando se llama al getCount() en mi clase de adaptador, no devuelve 0, pero de hecho está devolviendo el valor correcto. Estoy realmente confundido de por qué esto no está funcionando.Listview no se llena, getView() no se llama

Aquí es mi Actividad:

import android.app.Activity; 
import android.os.Bundle; 
import android.widget.ListView; 

public class CardListActivity extends Activity { 


protected ListView lv; 
protected int nCards = 12; 

protected String[] cardList = new String[nCards]; 

public void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.cardlist); 

    this.loadCardStrings(); 

    lv = (ListView) findViewById(R.id.CardList_ListView); 
    EditorListAdapter adapter = new EditorListAdapter(this, this.cardList); 
    lv.setAdapter(adapter); 
} 

protected void loadCardStrings(){ 
    cardList = getResources().getStringArray(R.array.card_list); 

    Util.logD("Created the string arrays with:" + Integer.toString(cardList.length) + " items."); 
} 
public void onStart(){ 
    super.onStart(); 
} 
public void onResume(){ 
    super.onResume(); 
} 
public void onPause(){ 
    super.onPause(); 
} 
public void onStop(){ 
    super.onStop(); 

} 
public void onDestroy(){ 
    super.onDestroy(); 
} 
} 

Este es el diagrama utilizado por la actividad:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout android:id="@+id/CardList_LinearLayout" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView android:id="@+id/text" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:text="Hello"/> 
    <ListView android:id="@+id/CardList_ListView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" /> 

</LinearLayout> 

Finalmente aquí está mi clase de adaptador:

import android.app.Activity; 
import android.graphics.Color; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.TextView; 

public class EditorListAdapter extends BaseAdapter 
{ 
    Activity context; 
    String names[]; 

    public EditorListAdapter(Activity context, String[] title) { 
     super(); 
     this.context = context; 
     this.names = title; 
    } 

    public int getCount() { 
     Util.logD("EditorListAdapter.getCount() ret:" + Integer.toString(names.length)); 
     return names.length; 
    } 

    public Object getItem(int position) { 
     Util.logD("EditorListAdapter.getItem()"); 
     return null; 
    } 

    public long getItemId(int position) { 
     Util.logD("EditorListAdapter.getItemId()"); 
     return 0; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     TextView t; 
     if (convertView == null) 
      t = new TextView(parent.getContext()); 
     else 
      t = (TextView) convertView; 

     t.setText(this.names[position]); 

     convertView = t; 

     Util.logD("EditorListAdapter.getView() + " + t.getText().toString()); 

     return convertView; 
    } 

    // Added per K-Ballo suggestion 
    public int getViewTypeCount(){ 
    return 1; 
} 
public int getItemViewType(){ 
    return 0; 
} 
} 
+0

Pruebe a implementar getViewTypeCount y haga que devuelva 1; y luego getItemViewType debería devolver 0. –

+0

Los agregué pero no hubo ningún efecto ... – slayton

+0

¿Has intentado implementar todos los métodos del Adaptador? Si hay algo fundamentalmente incorrecto con su código, no lo veo. –

Respuesta

30

Intente cambiar el android:layout_height="fill_parent" para la vista de texto a wrap_content en su lugar. Creo que la vista de lista nunca se muestra, por lo que nunca es necesario llamar a getView()

+2

+1, mi vista estaba oculta, por lo que 'getView()' nunca se llamó. – Cody

+3

Aw sí, resolvió mi problema (casi 1 año después). Me encanta stackoverflow. – acedanger

+0

maldición. Gracias. – mtb

4

Sé que ya hay una respuesta a esta pregunta.

Sin embargo, estoy teniendo una causa y razón diferentes con un síntoma similar a la pregunta original (getView() no se llama), por lo tanto creo que es beneficioso documentar aquí para otras personas que tienen una causa raíz diferente.

Como dada por http://hissain.in/wordpress/?p=659

“A veces parece notifyDataSetChanged() no funciona (y por lo tanto getView() no se llamará). La razón podría ser que su adaptador pierde referencia a su lista. Cuando inicializa por primera vez el Adaptador toma una referencia de su lista de matriz y pasa a su superclase. Pero si reinicia su lista de matriz existente, pierde la referencia, por lo tanto, el canal de comunicación con el adaptador "

Por lo tanto, nunca reinicie su lista, sino que utilice clear() en la lista.

list.clear(); // Right Thing to Do 
list = new List<T>(); // Wrong Thing to Do, will lose reference in the adapter