动态类型的数组列表和自定义适配器
问题描述:
我有类似的5类。每个类都有“代码”,“名称”属性。我使用自定义适配器来列出它们,并且我想为所有人使用1个适配器。这可能吗 ?动态类型的数组列表和自定义适配器
我在那里插件:holder.txtCode.setText(list.get(position).getCode()????); holder.txtName.setText(list.get(position).getName()?????);
public class AdapterCodeName extends BaseAdapter {
private static ArrayList<?> list;
private static ArrayList<?> listOrj;
private static ArrayList<?> mOriginalValues;
private LayoutInflater mInflater;
public AdapterCodeName (Context context, ArrayList<?> results){
list = results;
listOrj = results;
mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView == null){
convertView = mInflater.inflate(R.layout.row_code_name, null);
holder = new ViewHolder();
holder.txtCode = (TextView) convertView.findViewById(R.id.txtCode);
holder.txtName = (TextView) convertView.findViewById(R.id.txtName);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.txtCode.setText(list.get(position).getCode() ????);
holder.txtName.setText(list.get(position).getName() ?????);
return convertView;
}
static class ViewHolder{
TextView txtCode,txtName;
}
答
从一类(接口)延伸的所有类,并用碱型/接口的对象的列表中创建适配器:
public interface Item {
String getName();
String getCode();
}
public class ListItem1 implements Item {
private String name;
private String code;
@Override
public getName() {
return name;
}
@Override
public getCode() {
return code;
}
}
public class ListItem2 implements Item {
private String name;
private String code;
private String somethingElse;
@Override
public getName() {
return name;
}
@Override
public getCode() {
return code;
}
}
在适配器:
private static ArrayList<? extends Item> list;
@Override
public Item getItem(int i) {
return list.get(i);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
...
holder.txtCode.setText(list.get(position).getCode());
holder.txtName.setText(list.get(position).getName());
return convertView;
}