我有一些问题让我的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;
}
}
答案 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