好吧,所以我遇到了listView的attribut layout_width問題。ListView的Layout_width
在我的項目中,我的列表視圖背景圖像不適合屏幕寬度。所以我在wrap_content上設置了layout_width,並且我將listView水平居中。
看來這是一個壞主意,因爲在適配器中,GetView方法被調用的次數是顯示的單元格數量的3倍多。如果我在fill_parent上設置layout_width,問題就解決了。我創建了一個顯示問題的簡單項目。
下面是活動的XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@android:id/list"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
/>
</RelativeLayout>
的item_list XML:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>
最後活動:
package fr.example.android.listviewbug;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
public class ExampleListViewBugActivity extends ListActivity{
public static int cpt;
public static final String[] COUNTRIES = new String[] {
"Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
"Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
"Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
"Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
"Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
"Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
"British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
"Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
"Cayman Islands", "Central African Republic", "Chad", "Chile"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
cpt = 0;
setListAdapter(new CustomArrayAdapter(this, R.layout.list_item, COUNTRIES));
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d("AdapterTest", "onDestroy()");
}
private class CustomArrayAdapter extends ArrayAdapter<String>{
public CustomArrayAdapter(Context context, int textViewResourceId, String[] countries) {
super(context, textViewResourceId, countries);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d("AdapterTest", " cpt:"+ ++cpt);
return super.getView(position, convertView, parent);
}
}
}
所以我的解決辦法是簡單地設置fill_parent上的layout_width,並修改listview背景的圖像以添加一些適合的透明邊框屏幕尺寸。
但我想知道爲什麼這個問題與WRAP_CONTENT出現在列表視圖,以及它爲什麼不能在doc如果它是一個已知的問題...
你是listview romain的父親。 – Prateek 2013-01-05 11:54:18