您需要在范围0返回视图类型为int到的观看次数 - 1
@Override
public int getItemViewType(int position) {
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
if (mCompareDate == null || !fmt.format(mTransactions.get(mTransactionPosition).getTime()).equals(fmt.format(mCompareDate))) {
mCompareDate = mTransactions.get(mTransactionPosition).getTime();
return 1;
} else {
return 0;
}
}
编辑:另外,你不使用的位置在你的方法。 AdapterView需要向前和向后滚动,并以任何顺序访问视图。我不知道你是怎样用这种方法外管理的东西,但它看起来像你期望的适配器依次遍历...
ANOTHER编辑:这将在其他地方需要在适配器中的变化:
@Override
public int getItemViewType(int position) {
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
if (position == 0 || !fmt.format(mTransactions.get(position).getTime()
.equals(fmt.format(mTransactions.get(position - 1).getTime())) {
// First transaction on this date (probably want to give it a header?)
return 1;
else {
// transaction on same date as previous in list
return 0;
}
}
FINAL EDIT:因为你想要的DateViews不是列表中的元素,所以我建议完全忘记getItemViewType()。给你的交易视图一个标题相当于你的日期视图与一个ID,所以你可以设置可见性GONE或VISIBLE。
然后在onBindViewHolder():
SimpleDateFormat fmt = new SimpleDateFormat("yyyyMMdd");
if (position == 0 || !fmt.format(mTransactions.get(position).getTime()
.equals(fmt.format(mTransactions.get(position - 1).getTime())) {
// First transaction on this date (probably want to give it a header?)
holder.heading.setVisibility(View.VISIBLE);
holder.heading.setText(fmt.format(mTransactions.get(position).getTime());
else {
// transaction on same date as previous in list
holder.heading.setVisibility(View.GONE);
}
// Fill in other details of TransactionView here
您需要发布一个堆栈跟踪或更多的代码,这是好的。 – mikeb
你需要检查(mTransactions == null)和if(mTransactions.get(mTransactionPosition)== null) –
@DominiqueLorre我看着调试器经过它,这两个语句都不是真的。它从字面上读取if语句是正确的,进入返回2行然后继续到else并返回该值。 –