Android 具有自定义布局的ListActivity不调用getview
我有一个自定义行布局的ListActivity。行布局由复选框、文本视图和图像按钮组成 这后面是一个自定义对象的ArrayList,它只包含一个字符串和一个布尔值。我希望复选框反映布尔值,文本视图反映Sting,右边的按钮将启动操作 我使用ArrayAdapter页面上列出的最后一个构造函数尝试将这一切绑定在一起<代码>数组适配器(上下文上下文、int资源、int文本视图资源ID、列表对象) 由于某些原因,textView由对象toString()填充,而不是由getView填充。因此,该复选框根本不会获取布尔值。有什么想法吗Android 具有自定义布局的ListActivity不调用getview,android,listactivity,android-arrayadapter,Android,Listactivity,Android Arrayadapter,我有一个自定义行布局的ListActivity。行布局由复选框、文本视图和图像按钮组成 这后面是一个自定义对象的ArrayList,它只包含一个字符串和一个布尔值。我希望复选框反映布尔值,文本视图反映Sting,右边的按钮将启动操作 我使用ArrayAdapter页面上列出的最后一个构造函数尝试将这一切绑定在一起数组适配器(上下文上下文、int资源、int文本视图资源ID、列表对象) 由于某些原因,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;
}
}
}
公共类ListSelection扩展ListActivity{
私有数组列表;
删除私有数组列表;
静态私有最终字符串TAG=“kinder”;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(标记“ListSelection.onCreate”);
列表=新的ArrayList();
已删除=新建ArrayList();
Intent temp=getIntent();
String[]listNames=temp.getStringArrayExtra(“listNames”);
布尔[]listStatus=temp.getBooleanArrayExtra(“listStatus”);
for(int i=0;i
在我看来,您应该替换这一行:
setListAdapter(new ArrayAdapter<ListItem>(this, R.layout.selectionlistitem, R.id.text, list));
setListAdapter(新的ArrayAdapter(this,R.layout.selectionlistitem,R.id.text,list));
为此:
setListAdapter(new ListItemArrayAdapter<ListItem>(this, R.layout.selectionlistitem, list));
setListAdapter(新的ListItemArrayAdapter(this,R.layout.selectionlistitem,list));
目前,您使用的是
ArrayAdapter
的默认视图生成逻辑,即将每个数组元素的toString()
馈送到TextView
您完全正确。你不会相信我花了多少时间在这上面而没有看到那个错误。非常感谢!