Listview没有填充,getView()没有被调用

时间:2011-09-12 17:45:43

标签: android android-listview android-adapter

我有一些问题让我的listview显示在我正在编写的简单应用程序中。由于某种原因,我的适配器类的getView()方法没有被调用。但是,当在我的适配器类中调用getCount()时,它不返回0但实际上返回正确的值。我真的很困惑为什么这不起作用。

这是我的活动:

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

以下是活动使用的布局:

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

最后这是我的适配器类:

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

2 个答案:

答案 0 :(得分:30)

尝试将文本视图的android:layout_height="fill_parent"更改为wrap_content。我相信listview永远不会显示,所以永远不需要调用getView()

答案 1 :(得分:4)

我知道这个问题已经有了答案。

但是,我有一个不同的根本原因和原因与原始问题相似的症状(getView()没有被调用),因此我认为在这里记录其他有不同根本原因的人是有益的

http://hissain.in/wordpress/?p=659

给出

“有时看起来notifyDataSetChanged()似乎不适合你(因此getView()不会被调用)。 原因可能是您的适配器失去了对您的列表的引用。首次初始化适配器时,它会引用您的数组列表并传递给它的超类。但是,如果重新初始化现有的数组列表,它将失去引用,因此通信通道与适配器“

因此,永远不要重新初始化您的列表,而是在列表中使用clear()。

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