我正在使用BaseAdapter
来显示某些项目。
我不想在零位置更改项目的文本。
getView
的{{1}}方法看起来像
BaseAdapter
但我的输出是
我在我的所有应用程序中使用相同的逻辑并且它有效。我不知道这有什么不对。
它反映了第一个位置的最后一个值。
我尝试重建项目,清理项目,但没有成功。
提前致谢。
答案 0 :(得分:1)
你的问题是ListView的回收机制。请阅读this以获取更多信息。
您可以通过在if语句中设置数据来解决您的问题,因此您的getView必须如下:
try {
if(view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item_bill, parent, false);
}
Log.e("BillAdapter", "Position :: " + position);
TextView textDate = (TextView) view.findViewById(R.id.text_date);
TextView textPaidAmount = (TextView) view.findViewById(R.id.text_paid_amount);
if(position == 0) {
textDate.setText("Date");
textPaidAmount.setText("Paid Amount");
} else {
Bill bill = items.get(position);
Log.e("BillAdapter", position + " :: " + bill.toString());
textDate.setText(bill.getDate());
textPaidAmount.setText(String.format("%2.2f", bill.getPaidAmount()));
}
} catch (Exception ex) {
Log.e("BillAdpater", Log.getStackTraceString(ex));
}
当你在listView中的if语句中设置一个信息时,你必须在else中设置默认值或其他值,如果你没有设置为回收机制,你的值在滚动后随着一个随机位置改变了。
编辑::请参阅图片以获取详细信息
最好在适配器类中使用ViewHolder模式: 你可以使用以下代码。
在getView中使用:
try {
ViewHolder viewHolder;
if(view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item_bill, parent, false);
viewHolder = new ViewHolder();
viewHolder.textPaidAmount = (TextView) view.findViewById(R.id.text_paid_amount);
viewHolder.textDate = (TextView) view.findViewById(R.id.text_date);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
Log.e("BillAdapter", "Position :: " + position);
if(position == 0) {
holder.textDate.setText("Date");
holder.textPaidAmount.setText("Paid Amount");
} else {
Bill bill = items.get(position);
Log.e("BillAdapter", position + " :: " + bill.toString());
holder.textDate.setText(bill.getDate());
holder.textPaidAmount.setText(String.format("%2.2f", bill.getPaidAmount()));
}
} catch (Exception ex) {
Log.e("BillAdpater", Log.getStackTraceString(ex));
}
和ViewHolder类是:
class ViewHolder {
TextView textDate;
TextView textPaidAmount;
}
答案 1 :(得分:1)
View参数是一个重用的实例。 Android因性能原因而重复使用。
当位置== 0时,您应该明确设置预期值。
答案 2 :(得分:0)
我也遇到了这个问题,
In position 0 pass textView = ""