我在listview中使用不同的模板,这些模板通过自定义适配器从数组中填充。 我正在向List'items'添加项目,具体取决于Listview中的位置,使用不同的模板。
我有两个相关的问题,因为我的方法没有返回正确的视图ID:
如果我使用adapter.notifyDataSetChanged(); textview中的文本不适用,但是可视屏幕外的行也没有设置/调整。我使用以下方法获取视图ID:
TextView getText() {
if (title == null) {
switch (templateId) {
case ListViewAdapter.TPL_TITLE:
title = (TextView) row.findViewById(R.id.titletitle);
break;
case ListViewAdapter.TPL_PAYMENT:
title = (TextView) row.findViewById(R.id.titlepayment);
break;
}
}
return (title);
}
在我的活动中,我有不同的ListItems(一个单独的类):
items.add(new ListItem(id, title, description, amount, date, template));
我填写清单:
adapter = new ListViewAdapter(this, items);
mainMenu = (ListView) findViewById(R.id.listview);
mainMenu.setAdapter(adapter);
我有这个getView方法:
public View getView(int position, View convertView, ViewGroup parent) {
templateId=getTemplateID(items.get(position).getType());
View row = convertView;
ListViewWrapper wrapper = null;
if (row == null) {
LayoutInflater inflater = activity.getLayoutInflater();
row = inflater.inflate(R.layout.listviewtemplates, null);
wrapper = new ListViewWrapper(row);
row.setTag(wrapper);
} else {
wrapper = (ListViewWrapper) row.getTag();
}
wrapper.setTemplateId(templateId);
wrapper.populateFrom(items.get(position));
return (row);
}
在包装器中:
public void populateFrom(ListItem r) {
getText().setText(r.getTitle());
if (templateId == ListViewAdapter.TPL_TITLE) {
}
if (templateId == ListViewAdapter.TPL_PAYMENT) {
getSubtext().setText(r.getDescription());
getAmount().setText(r.getAmount());
getDate().setText(r.getDate());
} }
setTemplate();
}
希望这是可读的,任何人都能理解/认识我的问题。我想真正的问题是,如何获得每行返回正确的ViewID?
答案 0 :(得分:0)
刚才意识到if(title == null){...}不起作用,删除它解决了问题