android - 为 Imageview 请求 RecyclerViewAdapter.notifyItemChanged 的示例
问题描述
我想使用我的 Recyclerviews 中的一个按钮来更改 Recyclerview 中的一个对象,即将 Imageview 设置为透明。
所以我发现我需要在那个场合使用 notifyItemChanged(int,object,payload) 看到这个线程:(示例 NotifyItemChanged)。遗憾的是,这个例子没有达到关于如何使用对象值来改变图像的值,(ImageView.setImageAlpha(70))。
要求:
您能否给我一个示例,说明如何使用 notifyItemChanged 更改 Recycleradapter 中 ImageView之一的 setImageAlpha 值。
我的框架
我将发布我的代码,因此如果您愿意,可以相应地对其进行编辑。但我也可以尝试自己做。
public class deckbuilder_RViewAdapter_Card extends RecyclerView.Adapter<deckbuilder_RViewAdapter_Card.ViewHolder > {
private List<Cards> mData;
private List<Heros> mHero, mHeroAdd;
private List<Spells> mSpell, mSpellSig;
private List<Items> mItem;
private List<Improvements> mImpr, mImprSig;
private List<Creeps> mCreep, mCreepSig;
private List<Decklist> mDecklist;
private List<Decklist_Heros> mDecklistHeros;
DBHelper dbHelper;
private CardView introCardview;
private Context mContext;
private RecyclerView mrvList,mrvHeros;
private deckbuilder_RViewAdapter_List mRViewAdapterList;
private deckbuilder_RViewAdapter_Heros mRViewAdapterHeros;
private int questionmarkNo;
public deckbuilder_RViewAdapter_Card (FragmentActivity mContext, List<Cards> mData, deckbuilder_RViewAdapter_List mRViewAdapterList, List<Decklist> mDecklist, RecyclerView rvList, deckbuilder_RViewAdapter_Heros mRViewAdapterHeros, List<Decklist_Heros> mDecklistHeros, RecyclerView rvHeros) {
this.mData = mData;
this.mContext = mContext;
this.mRViewAdapterList = mRViewAdapterList;
this.mDecklist = mDecklist;
this.mrvList = rvList;
this.mRViewAdapterHeros = mRViewAdapterHeros;
this.mDecklistHeros = mDecklistHeros;
this.mrvHeros= rvHeros;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
dbHelper = new DBHelper(mContext.getApplicationContext());
dbHelper.createDataBase();// used for clickable
//Todo change inflated layout later on <-????
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.layout_cardview_deckbuilder_cards, viewGroup, false);
return new deckbuilder_RViewAdapter_Card.ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int position) {
viewHolder.ivCardImage.setImageResource(mData.get(position).getCardImage());
viewHolder.tvCardName.setText(mData.get(position).getCardName());
viewHolder.ivCardImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cardClickable(position);
}
});
viewHolder.tvCardName.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
cardClickable(position);
}
});
/* Init the Add and Remove button */
viewHolder.civ_deckbuilder_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(mData.get(position).getCardType().equals("hero")){
addHero(viewHolder, position);
}else {
addOtherCards(viewHolder,position);
}
}
});
viewHolder.civ_deckbuilder_remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(mData.get(position).getCardType().equals("hero")){
removeHero(position);
**viewHolder.ivCardImage.setImageAlpha(70);**
}else {
removeOtherCard(position);
**viewHolder.ivCardImage.setImageAlpha(70);**
}
}
});
}
@Override
public int getItemCount() {
return mData.size();
}
public class ViewHolder extends RecyclerView.ViewHolder{
CircleImageView civ_deckbuilder_add, civ_deckbuilder_remove, civ_deckbuilder_number;
ImageView ivCardImage;
TextView tvCardName;
public ViewHolder(@NonNull View introListView) {
super(introListView);
ivCardImage = introListView.findViewById(R.id.ivDeckbuilder_img);
tvCardName = introListView.findViewById(R.id.tvDeckbuilder_title);
civ_deckbuilder_add = introListView.findViewById(R.id.civ_deckbuilder_add);
civ_deckbuilder_remove = introListView.findViewById(R.id.civ_deckbuilder_remove);
}
}
//[...] used methods should not be relevant.
}
感谢您为我提供的任何帮助!
解决方案
首先,您的Cards数据类应该有一个初始化为 255的alpha属性以获得完全可见的图像。
在 onBindViewHolder 中使用
viewHolder.ivCardImage.setImageAlpha(mData.get(position).getAlpha());
然后在你的点击事件中
@Override public void onClick(View view) { .... mData.get(position).setAlpha(70); notifyItemChanged(position); } }
推荐阅读
- apache - 无法在apache中连接本地IP地址
- c# - 连接到 C# 应用程序在 python-3.7 中失败,但在 python-2.7 中有效
- python - 部署 Django 应用程序 WSGI.py 错误
- python - Python 中的 Selenium:如何评论每个 Instagram 帖子?
- javascript - 在 svelte 中单击 Leaflet 弹出窗口时更新变量值
- java - 安装 Kotlin-Jupyter:e: java.lang.NoClassDefFoundError: 无法初始化类 org.jetbrains.kotlin.com.intellij.pom.java.LanguageLevel
- python - 为什么这个自动阵列调整器不起作用?
- python - 配置单元表中的数据框未通过 sqlalchemy 填充
- php - CHDIR 不是每次都更改目录?
- arduino - 比较arduino中的串行输入