gpt4 book ai didi

android - java.lang.IllegalArgumentException : Scrapped or attached views may not be recycled. isScrap:false isAttached:true 向下滚动时

转载 作者:搜寻专家 更新时间:2023-11-01 07:46:03 28 4
gpt4 key购买 nike

FATAL EXCEPTION: main Process: com.zipato.android.client.v2, PID: 24966 java.lang.IllegalArgumentException: Scrapped or attached views may not be recycled. isScrap:false isAttached:true at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:5736) at android.support.v7.widget.RecyclerView$Recycler.recycleView(RecyclerView.java:5680) at android.support.v7.widget.GapWorker.prefetchPositionWithDeadline(GapWorker.java:289) at android.support.v7.widget.GapWorker.flushTaskWithDeadline(GapWorker.java:336) at android.support.v7.widget.GapWorker.flushTasksWithDeadline(GapWorker.java:349) at android.support.v7.widget.GapWorker.prefetch(GapWorker.java:356) at android.support.v7.widget.GapWorker.run(GapWorker.java:387) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5226) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

当我向下滚动时应用程序一直崩溃..

这是我的适配器的样子:

public class WalletAdapter extends SectioningAdapter {

static final boolean USE_DEBUG_APPEARANCE = false;


private List<Transaction> transactions;
private List<Section> sections = new ArrayList<>();

public WalletAdapter() {
}

private class Section {
String alpha;
List<Transaction> transactions = new ArrayList<>();
}

public List<Transaction> getTransactions() {
return transactions;
}

public void setTransactions(List<Transaction> transactions) {
this.transactions = transactions;
sections.clear();

String mDate = "31.12.2222";

Section currentSection = null;
for (Transaction transaction : transactions) {
String date = parseDate(transaction.getCreatedDate());
if (!date.equals(mDate)) {
if (currentSection != null) {
sections.add(currentSection);
}

currentSection = new Section();
mDate = date;
currentSection.alpha = String.valueOf(mDate);
}

if (currentSection != null) {
currentSection.transactions.add(transaction);
}
}

sections.add(currentSection);
notifyAllSectionsDataSetChanged();
}

private String parseDate(Date date) {
DateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.getDefault());
String formattedDate = "";
formattedDate = df.format(date);
return formattedDate;
}

@Override
public int getNumberOfSections() {
return sections.size();
}

@Override
public boolean doesSectionHaveHeader(int sectionIndex) {
return sectionIndex == 0 || !parseDate(transactions.get(sectionIndex).getCreatedDate()).equals(parseDate(transactions.get(sectionIndex - 1).getCreatedDate()));
}

@Override
public boolean doesSectionHaveFooter(int sectionIndex) {
return false;
}

@Override
public int getNumberOfItemsInSection(int sectionIndex) {
return sections.get(sectionIndex).transactions.size();
}

@Override
public ItemViewHolder onCreateItemViewHolder(ViewGroup parent, int itemUserType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View v = inflater.inflate(R.layout.wallet_item, parent, false);
return new ItemViewHolder(v);
}

@Override
public HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent, int headerUserType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View v = inflater.inflate(R.layout.wallet_header, parent, false);
return new HeaderViewHolder(v);
}

@Override
public void onBindItemViewHolder(SectioningAdapter.ItemViewHolder viewHolder, int sectionIndex, int itemIndex, int itemType) {
super.onBindItemViewHolder(viewHolder, sectionIndex, itemIndex, itemType);
Section section = sections.get(sectionIndex);
ItemViewHolder holder = (ItemViewHolder) viewHolder;
Transaction transaction = section.transactions.get(itemIndex);
holder.description.setText(transaction.getDescription());
holder.ammount.setText(String.valueOf(transaction.getAmount()));
holder.time.setText(parseDate(transaction.getCreatedDate()));
holder.total.setText(String.valueOf(transaction.getNewCredits()));
}


@Override
public void onBindHeaderViewHolder(SectioningAdapter.HeaderViewHolder viewHolder, int sectionIndex, int headerType) {
super.onBindHeaderViewHolder(viewHolder, sectionIndex, headerType);
Section s = sections.get(sectionIndex);
HeaderViewHolder hvh = (HeaderViewHolder) viewHolder;

if (USE_DEBUG_APPEARANCE) {
hvh.itemView.setBackgroundColor(0x55ffffff);
hvh.dateHeader.setText(pad(sectionIndex * 2) + s.alpha);
} else {
hvh.dateHeader.setText(s.alpha);
}
}

private String pad(int spaces) {
StringBuilder b = new StringBuilder();
for (int i = 0; i < spaces; i++) {
b.append(' ');
}
return b.toString();
}

public class HeaderViewHolder extends SectioningAdapter.HeaderViewHolder {

TextView dateHeader;

public HeaderViewHolder(View itemView) {
super(itemView);
dateHeader = (TextView) itemView.findViewById(R.id.date);
}
}

public class ItemViewHolder extends SectioningAdapter.ItemViewHolder {

TextView description;
TextView time;
TextView ammount;
TextView total;

public ItemViewHolder(View itemView) {
super(itemView);
description = (TextView) itemView.findViewById(R.id.description);
time = (TextView) itemView.findViewById(R.id.time);
ammount = (TextView) itemView.findViewById(R.id.ammount);
total = (TextView) itemView.findViewById(R.id.new_credits);
}
}

这是我的 Activity 的 xml 布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.zipato.appv2.activities.WalletActivity">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent" />

以及 onCreate Activity 中的代码:

 recyclerView.setHasFixedSize(false);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);

最佳答案

有同样的问题,但没有找到导致它的原因......似乎是支持库中的错误。您可以尝试禁用布局管理器的项目预取:

layoutManager.setItemPrefetchEnabled(false);

为我解决了这个问题!

关于android - java.lang.IllegalArgumentException : Scrapped or attached views may not be recycled. isScrap:false isAttached:true 向下滚动时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43932210/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com