3
我有一個自定義行佈局的ListActivity。行佈局由複選框,文本視圖和圖像按鈕組成。ListActivity與自定義佈局不調用getview
在這個背後是一個自定義對象的ArrayList,它包含一個String和一個布爾值。我想複選框來反映布爾值,反映斯汀的文本視圖,而右邊的按鈕將啓動一個動作。
我使用ArrayAdapter頁面上列出的最後一個構造函數來嘗試將這些全部綁定在一起。 ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
出於某種原因,textView由對象toString()填充,而不是由getView填充。因此,該複選框永遠不會獲得布爾值。有任何想法嗎?
public class ListSelection extends ListActivity {
private ArrayList<ListItem> list;
private ArrayList<String> deleted;
static private final String TAG = "kinder";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "ListSelection.onCreate");
list = new ArrayList<ListItem>();
deleted = new ArrayList<String>();
Intent temp = getIntent();
String[] listNames = temp.getStringArrayExtra("listNames");
boolean[] listStatus = temp.getBooleanArrayExtra("listStatus");
for (int i = 0; i < listNames.length; i++) {
list.add(new ListItem(listNames[i], listStatus[i]));
}
**setListAdapter(new ArrayAdapter<ListItem>(this, R.layout.selectionlistitem, R.id.text, list));**
}
private class ListItem {
String listName;
Boolean listStatus;
public ListItem(String name, boolean status) {
listName = name;
listStatus = status;
}
@Override
public String toString() {
return listName;
}
}
public class ListItemArrayAdapter extends ArrayAdapter<ListItem> {
int resource;
LayoutInflater vi;
private List<ListItem> items;
public ListItemArrayAdapter(Context context, int _resource, List<ListItem> listitems) {
super(context, _resource, listitems);
Log.d(TAG, "listItemArrayAdapter");
vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
resource = _resource;
this.items = listitems;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "listItemArrayAdapter.getView");
LinearLayout newView;
ListItem item = getItem(position);
if (convertView == null) {
newView = new LinearLayout(getContext());
vi.inflate(resource, newView);
} else {
newView = (LinearLayout)convertView;
}
TextView textview = (TextView)newView.findViewById(R.id.text);
Log.d(TAG, item.listName);
textview.setText(item.listName);
CheckBox checkbox = (CheckBox)newView.findViewById(R.id.checkbox);
checkbox.setChecked(item.listStatus);
return newView;
}
}
}
你是絕對正確的。你不會相信我在沒有看到那個錯誤的情況下花了多少時間。萬分感謝! – vanstrien 2011-02-14 12:37:03