gpt4 book ai didi

android - 具有自定义布局的 ListActivity 不调用 getview

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:38 25 4
gpt4 key购买 nike

我有一个带有自定义行布局的 ListActivity。行布局由一个复选框、一个 TextView 和一个图像按钮组成。

在这之后是一个自定义对象的 ArrayList,只包含一个字符串和一个 bool 值。我想要复选框来反射(reflect) bool 值, TextView 来反射(reflect) Sting,右边的按钮将启动一个 Action 。

我使用 ArrayAdapter 页面上列出的最后一个构造函数来尝试将它们绑定(bind)在一起。 ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

出于某种原因,textView 由对象 toString() 而不是 getView 填充。因此,复选框根本不会获得 bool 值。有什么想法吗?

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

}

最佳答案

在我看来你应该替换这一行:

setListAdapter(new ArrayAdapter<ListItem>(this, R.layout.selectionlistitem, R.id.text, list));

用这个:

setListAdapter(new ListItemArrayAdapter<ListItem>(this, R.layout.selectionlistitem, list));

目前,您正在使用 ArrayAdapter 的默认 View 生成逻辑,即将每个数组元素的 toString() 提供给 TextView.

关于android - 具有自定义布局的 ListActivity 不调用 getview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4988386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com