- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的代码如下所示:
public class PopularItemsAdapter extends RecyclerView.Adapter<PopularItemsAdapter.MyViewHolder>
implements MyCartListener {
private Context mContext;
private List<FoodTruckItem> foodTruckItemList;
private boolean isClickable = false;
private OnItemClickListener listener;
private List<FoodtruckInfo> foodtruckInfoList = new ArrayList<>();
private List<FoodTruckItem> sessionItem = new ArrayList<>();
private boolean isConflictResolved = false;
public int position = -1;
@Override
public void itemUpdated(int quantity, String itemId) {
for (int i = 0; i < foodTruckItemList.size(); i++) {
if (itemId.equals(foodTruckItemList.get(i).getItemId())) {
foodTruckItemList.get(i).setItemQuantityOrdered(quantity);
// notifyDataSetChanged();
}
}
}
@Override
public void itemRemoved(String itemId) {
for (int j = 0; j < foodTruckItemList.size(); j++) {
if (itemId.equals(foodTruckItemList.get(j).getItemId())) {
foodTruckItemList.remove(j);
// notifyDataSetChanged();
}
}
}
public void addConflictItem(int position) {
isConflictResolved = true;
notifyItemChanged(position);
}
public interface OnItemClickListener {
void onItemClick(FoodTruckItem foodTruckItem, FoodtruckInfo foodtruckInfo);
void showSnackBar(int items, boolean added, int position);
void showRestaurentClosed();
void showWarningDialog(int position);
}
public void addFoodInfo(List<FoodtruckInfo> foodtruckInfos) {
foodtruckInfoList.addAll(foodtruckInfos);
}
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public TextView itemName, foodPrice, addText, quantityText, addQuantity, removeQuantity;
public ImageView itemImage, itemTag;
public LinearLayout addLayout;
public MyViewHolder(View view) {
super(view);
itemTag = (ImageView) view.findViewById(R.id.itemTag);
itemImage = (ImageView) view.findViewById(R.id.itemImage);
itemName = (TextView) view.findViewById(R.id.itemName);
foodPrice = (TextView) view.findViewById(R.id.foodPrice);
addText = (TextView) view.findViewById(R.id.addText);
addLayout = (LinearLayout) view.findViewById(R.id.addLayout);
quantityText = (TextView) view.findViewById(R.id.quantityText);
addQuantity = (TextView) view.findViewById(R.id.addQuantity);
removeQuantity = (TextView) view.findViewById(R.id.removeQuantity);
view.setOnClickListener(this);
}
@Override
public void onClick(View view) {
FoodtruckInfo foodtruckInfo = new FoodtruckInfo();
//passing the clicked position to the parent class
for (FoodtruckInfo info : foodtruckInfoList) {
if (info.getItemId().equals(foodTruckItemList.get(getAdapterPosition()).getItemId())) {
foodtruckInfo = info;
}
}
listener.onItemClick(foodTruckItemList.get(getAdapterPosition()), foodtruckInfo);
}
}
public PopularItemsAdapter(Context mContext, List<FoodTruckItem> foodTruckItemList, OnItemClickListener listener) {
this.mContext = mContext;
this.foodTruckItemList = foodTruckItemList;
this.listener = listener;
MyCart.getInstance().addListener(this);
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_view_popular_items, parent, false);
return new MyViewHolder(itemView);
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
final FoodTruckItem foodTruckItem = foodTruckItemList.get(position);
if (SessionManager.get(mContext).getFoodTruckItemList() != null) {
sessionItem = SessionManager.get(mContext).getFoodTruckItemList();
for (FoodTruckItem item : sessionItem) {
if (item.getItemId().equals(foodTruckItem.getItemId())) {
// holder.itemTag.setText("MY FAVOURITE");
holder.itemTag.setImageDrawable(ContextCompat.getDrawable(mContext, R.drawable.ic_favorite));
}
}
}
holder.itemName.setText(foodTruckItem.getItemName());
// holder.itemTag.setText(foodTruckItem.getSpecialTag());
holder.foodPrice.setText("$" + String.valueOf(foodTruckItem.getItemPrice()));
Picasso.Builder builder = new Picasso.Builder(mContext);
builder.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception exception) {
exception.printStackTrace();
}
});
if (!TextUtils.isEmpty(foodTruckItem.getItemImg())) {
builder.build().load(foodTruckItem.getItemImg()).into(holder.itemImage);
}
holder.addText.setOnClickListener(new View.OnClickListener() {
FoodtruckInfo info = new FoodtruckInfo();
@Override
public void onClick(View v) {
for (int l = 0; l < foodtruckInfoList.size(); l++) {
if (foodtruckInfoList.get(l).getItemId().equals(foodTruckItem.getItemId())) {
if (foodtruckInfoList.get(l).getOrderStatus() == 0) {
isClickable = true;
} else {
isClickable = false;
}
}
}
if (isClickable) {
String foodTruckId = null;
if (MyCart.getInstance().getFoodTruckId() != null) {
foodTruckId = MyCart.getInstance().getFoodTruckId();
if (!foodTruckId.equals(foodtruckInfoList.get(position).getFoodTruckId())) {
listener.showWarningDialog(position);
} else {
addItem(holder, position, foodTruckItem);
}
} else {
isConflictResolved = false;
addItem(holder, position, foodTruckItem);
}
} else {
listener.showRestaurentClosed();
}
if (isConflictResolved) {
isConflictResolved = false;
addItem(holder, position, foodTruckItem);
}
}
});
holder.addQuantity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int quantity = foodTruckItem.getItemQuantityOrdered();
quantity += 1;
holder.quantityText.setText(String.valueOf(quantity));
MyCart.getInstance().updateQuantity(quantity, foodTruckItem.getItemId(), false);
}
});
holder.removeQuantity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int quantity = foodTruckItem.getItemQuantityOrdered();
quantity -= 1;
if (quantity == 0) {
MyCart.getInstance().removeItem(foodTruckItem.getItemId(), false);
holder.addLayout.setVisibility(View.INVISIBLE);
holder.addText.setVisibility(View.VISIBLE);
listener.showSnackBar(quantity, false, position);
} else {
holder.quantityText.setText(String.valueOf(quantity));
MyCart.getInstance().updateQuantity(quantity, foodTruckItem.getItemId(), false);
}
}
});
setFontStyle(holder);
}
private void addItem(MyViewHolder holder, int position, FoodTruckItem foodTruckItem) {
holder.addLayout.setVisibility(View.VISIBLE);
holder.addText.setVisibility(View.INVISIBLE);
foodTruckItem.setItemQuantityOrdered(1);
holder.quantityText.setText(String.valueOf(1));
MyCart.getInstance().addItem(foodTruckItem);
MyCart.getInstance().setFoodTruckId(foodtruckInfoList.get(position).getFoodTruckId());
listener.showSnackBar(MyCart.getInstance().getItemList(), true, position);
}
private void setFontStyle(MyViewHolder holder) {
holder.itemName.setTypeface(Typeface.createFromAsset(mContext.getAssets(), Consts.montserrat_bold));
// holder.itemTag.setTypeface(Typeface.createFromAsset(mContext.getAssets(), Consts.montserrat_bold));
holder.foodPrice.setTypeface(Typeface.createFromAsset(mContext.getAssets(), Consts.montserrat_bold));
holder.addText.setTypeface(Typeface.createFromAsset(mContext.getAssets(), Consts.montserrat_bold));
}
@Override
public int getItemCount() {
return foodTruckItemList.size();
}
}
这里 addConflictItem()
我写了 notifyItemChanged
,但不知何故它没有调用 onBindViewHolder
,所以应用程序中是否缺少任何内容?
最佳答案
我遇到了同样的问题,这对我有用,只需将这些行添加到您的 recyclerview 声明中,请参阅 this Asnswer
DefaultItemAnimator animator = new DefaultItemAnimator() {
@Override
public boolean canReuseUpdatedViewHolder(RecyclerView.ViewHolder viewHolder) {
return true;
}
};
mRecyclerView.setItemAnimator(animator);
关于android - notifyItemChanged 方法不会在 recyclerview 中调用 onBindViewHolder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45665302/
我知道这可能是一个愚蠢的问题,但我找不到答案。我请求你的帮助。 我有一个使用 LinearLayoutManager 的 RecyclerView 和一个自定义 RecyclerView.Adapte
我正在使用后台服务下载一些文件并更新 RecyclerView 中的进度。当进度更改时,服务将使用回调到 Activity ,其中项目随进度更改。我想知道哪一个在性能方面更好? 所以我必须像这样使用
我有一个 ImageView,其中使用 Glide 加载图像。当我执行了 like 操作后,使用 notifyItemChanged(position) 通知回收器 View 适配器。它会导致图像闪烁
当我在我的 RecyclerView 上调用 notifyItemChanged() 时,相应的 Views(在本例中为按钮)没有按预期更新.我调用他们的原因是数据已经改变,这会导致他们的背景颜色改变
首先,我为此工作了一整天,但一事无成。我有一个 RecyclerView 和一个使用 RecyclerView 的 SortedList 的适配器。我尝试使用回调类实现 TouchHelper: pu
为了在我从详细信息 Activity 返回时从最后选择的 RecyclerView 项目中删除突出显示的背景颜色,我在 onResume() 中尝试了这个: mAdapter.notifyItemCh
RecyclerView 调用 notifyItemChanged() 导致空白条目 我有一个 RecyclerView 并且它的每个子项都有一个 RecyclerView,当子项中的 Recycle
根据documentation在 RecyclerView.Adapter 中,您可以通知某个项目已更改并传入一个“可选负载对象”,该对象随后将被合并并传递给 onBindViewHolder允许更精
我有一个带有显示服务器列表的适配器的 RecycleView并且用户必须选择一个服务器。 当我在 onClick() 方法中调用 notifyItemChanged(previousPosition)
我有一个数据集,它可能会在刷新时发生变化。很难确定现有数据集中的哪些条目已更改。我通读了 recyclerview 适配器说明,我的主要问题是。 确定更改了哪个数据 View ,然后对受影响的范围使用
我有一个使用 LinearLayoutManager 的 RecyclerView 和一个自定义 RecyclerView.Adapter。当用户长按某个项目时,它会触发仅该项目的异步网络刷新。我知道
我正在将 ViewPager2 与 FragmentStateAdapter 一起使用,并且我正在调用 notifyItemChanged(position)。但正如预期的那样,createFragm
编辑 我在 Github 上创建了一个演示项目来展示确切的问题。 Git Project . 我在 Kotlin 中编写了一个可扩展的 recyclerView 每行都有一个使用 TextToSpee
如题。我正在编写一个支持多选模式的自定义 RecyclerView。我需要跟踪每个项目的选中/未选中状态。所以在 recyclerView 的数据大小发生变化之后。我想更新我的跟踪状态列表的大小。但我
我的代码如下所示: public class PopularItemsAdapter extends RecyclerView.Adapter implements MyCartLis
我在 AdapterActivity 中有一个 RecyclerView。单击其任何项目后,我使用 AlertDialogShow#UpdateStudent() 方法更新该项目。我的问题是我无法使用
有什么方法可以在项目更改时从回收 View 中禁用 CardView 提升动画,但保留原始阴影和项目动画师? 我试图禁用 CardView 状态动画器 android:stateListAnimato
所以我有一个 Activity RecyclerView我想改变TextView RecyclerView 中的每一项通过按下具有 onClickListener() 的按钮在 Activity 中。
我正在尝试更新 ViewHolder 中的 RecyclerView 而不重新绑定(bind)整个内容。根据文档,我应该通过调用 RecyclerView.Adapter.notifyItemChan
所以我有一个 RecyclerView,在我拉入其中的每个 xml 中都有一个复选框,当按下该复选框时,该复选框会从 RecyclerView 中删除该特定项目。至少那是我试图做的。据我了解,要使其正
我是一名优秀的程序员,十分优秀!