Android 我可以用我自己的类的列表填充listview吗?
我想用我自己元素的Android 我可以用我自己的类的列表填充listview吗?,android,Android,我想用我自己元素的链接列表填充列表视图 我的班级是这样的: public class Foo { public String text; } CustomAdapter customAdapter = new CustomAdapter(context, getList()); listView.setAdapter(customAdapter); 这是我的适配器和列表: String[] fromColumns = {"X"}; int[] toViews = {android.R
链接列表
填充列表视图
我的班级是这样的:
public class Foo {
public String text;
}
CustomAdapter customAdapter = new CustomAdapter(context, getList());
listView.setAdapter(customAdapter);
这是我的适配器和列表:
String[] fromColumns = {"X"};
int[] toViews = {android.R.id.text1};
mAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, null,
fromColumns, toViews, 0);
list = (ListView)findViewById(R.id.list);
list.setAdapter(mAdapter);
我还有一个链接列表元素代码>我要在列表中显示的内容
现在的问题是:如何解决这个问题
我不知道要在from columns
中写入什么来匹配我的文本
值
我不知道如何将我的元素
列表绑定到列表,以便显示它
您需要为此创建自定义适配器
比如:
公共类AdapterCategoryList扩展了BaseAdapter{
私人语境;
私人ArrayList类别名称;
公共AdapterCategoryList(上下文,ArrayList categoryNames){
this.context=上下文;
this.categoryNames=categoryNames;
}
@凌驾
public int getCount(){
返回categoryNames.size();
}
@凌驾
公共对象getItem(int位置){
返回categoryNames.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
持有人;
if(convertView==null){
convertView=View.inflate(上下文,R.layout.listitem\u类别\u列表,空);
保持架=新保持架();
holder.mTxtCategoryImage=(TextView)convertView.findViewById(R.id.txtCategoryListItem);
convertView.setTag(支架);
}否则{
holder=(holder)convertView.getTag();
}
holder.mTxtCategoryImage.setBackgroundResource(categoryNames.get(position.getCategoryImage());
返回视图;
}
阶级持有者{
文本视图mTxtCategoryImage;
}
}
创建自定义适配器。您可以扩展BaseAdapter
或ArrayAdapter
ArrayAdapter
是一个泛型类,因此它适用于本例
一种可能的实施方式:
public class CustomAdapter extends ArrayAdapter<Item> {
public CustomAdapter(Context context, List<Item> items) {
super(context, 0, items);
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(getContext(), R.layout.some_layout, null);
holder = new ViewHolder();
holder.textView = (TextView) convertView.findViewById(R.id.textView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText(getItem(position).getText());
return convertView;
}
private class ViewHolder {
TextView textView;
}
}
我编辑了你的答案。ArrayAdapter已经有了一个列表和上下文,因此您可以(也应该)使用它们。此外,如果在适配器中使用自定义列表而不是使用ArrayAdapter列表,则add
的默认实现将不起作用。此外,我还使用了View.flate
,这样您就不必将layoutine实例化为flater,代码也就变平了clearer@santirivera92哦,你说得对。只是从一个旧项目复制粘贴了一些代码,而没有真正注意。谢谢
CustomAdapter customAdapter = new CustomAdapter(context, getList());
listView.setAdapter(customAdapter);