gpt4 book ai didi

java - RecyclerView 和可扩展卡的奇怪故障

转载 作者:行者123 更新时间:2023-11-30 00:10:35 25 4
gpt4 key购买 nike

<分区>

我正尝试进入 Android 应用程序开发,每个路线应用程序的步行时间很短。
但是一个小故障阻止了我继续。
我试着用谷歌搜索了很多次都没有结果,事情是这样的:

我的 RecyclerViewonClick-expand cards 显示奇怪的行为,当我在其中添加太多项目时会立即重新加载整个列表。它还以某种方式将整个列表向下移动了一秒钟。作为引用,这是我的 github 项目:https://github.com/TheInsayn/velocity

这是它的行为方式:
Imgur

但是在我添加了第 6 个项目之后它的行为是这样的:

Imgur

这是我用于适配器的代码(尤其是 onBindViewHolderisExpanded):
我什至使用了 Google 在 I/O 2016 中的引用建议。(我真的不想使用第 3 方库)

class RecyclerAdapterWalks extends RecyclerView.Adapter<RecyclerAdapterWalks.WalkCardHolder> {
private List<Walk> mWalkList;
private RecyclerView mRecyclerView;
private int mExpandedPosition = -1;

class WalkCardHolder extends RecyclerView.ViewHolder {
TextView mWalkRoute;
TextView mWalkDuration;
TextView mWalkDate;
TextView mWalkWeekday;
RelativeLayout mExpansion;
TextView mAverageTime;

WalkCardHolder(View view) {
super(view);
mWalkRoute = view.findViewById(R.id.txt_walk_route);
mWalkDuration = view.findViewById(R.id.txt_walk_duration);
mWalkDate = view.findViewById(R.id.txt_walk_date);
mWalkWeekday = view.findViewById(R.id.txt_walk_weekday);
mExpansion = view.findViewById(R.id.walk_card_expansion);
mAverageTime = view.findViewById(R.id.txt_walk_average);
}
}

RecyclerAdapterWalks(List<Walk> routes, RecyclerView rv) {
mWalkList = routes;
mRecyclerView = rv;
setHasStableIds(true);
}

@Override
public WalkCardHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_walk, parent, false);
return new WalkCardHolder(view);
}

@Override
public void onBindViewHolder(WalkCardHolder holder, int position) {
Walk walk = mWalkList.get(position);
holder.mWalkRoute.setText(walk.getRoute().getName());
holder.mWalkDuration.setText(DateFormat.format("mm:ss", new Date(walk.getDuration())));
holder.mWalkDate.setText(DateFormat.format("dd.MM.yyyy", walk.getDate()));
holder.mWalkWeekday.setText(DateFormat.format("EEEE", walk.getDate()));
//handle expansion in list
final boolean isExpanded = position == mExpandedPosition;
holder.mExpansion.setVisibility(isExpanded ? View.VISIBLE : View.GONE);
holder.itemView.setActivated(isExpanded);
holder.itemView.setOnClickListener(v -> {
mExpandedPosition = isExpanded ? -1 : position;
TransitionManager.beginDelayedTransition(mRecyclerView);
notifyDataSetChanged();
});
if (isExpanded) {
Date avg = new Date(walk.getRoute().getAverageWalkTime(mRecyclerView.getContext()));
CharSequence min = DateFormat.format("m", avg);
CharSequence sec = DateFormat.format("s", avg);
String boldText = walk.getRoute().getName();
String timeStr = "average walk duration for " + boldText + ": ";
if (!min.equals("0")) timeStr += min + "m and ";
timeStr += sec + "s";
int idx = timeStr.indexOf(boldText);
SpannableString str = new SpannableString(timeStr);
str.setSpan(new StyleSpan(Typeface.BOLD), idx, idx + boldText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
holder.mAverageTime.setText(str);
}
}

@Override
public int getItemCount() {
return mWalkList.size();
}

我在 RecyclerView 中的 CardView 中的 CoordinatorLayout 中的 FrameLayout 中的 RelativeLayout 中...

有人知道是什么原因造成的吗?
很抱歉发了这么长的帖子,感谢您的帮助。 :)

编辑:在适配器的构造函数中使用 setHasStableIds(true) 似乎有点帮助。但现在的转型远非一帆风顺。
小名单(更糟):
Imgur
更长的列表(更好):
Imgur

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