android - Android:回收站视图的用户界面在项目点击时不会改变?
问题描述
当我单击该项目时,我正在尝试更改回收站视图项目的背景。数据实际上会发生变化,但 UI 不会。我已经尝试了很多尝试不同的方法,但没有任何效果。虽然我正在调用 notifyItemChanged() 但它没有用。
任何使这件事起作用的解决方案都会非常有帮助。
**我的代码:**
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, final int i) {
customNoteView = notesList.get(i);
notesText = viewHolder.notesWriteArea;
notesImage = viewHolder.notesImage;
notesAudio = viewHolder.notesAudio;
notesAudioPlayButton = viewHolder.notesAudioPlayButton;
notesAudioSeekBar = viewHolder.notesAudioSeekBar;
notesAudioDeleteButton = viewHolder.notesAudioDeleteButton;
if(customNoteView.getNoteText()!=null){
editTextList.add(notesText);
notesText.setVisibility(View.VISIBLE);
notesImage.setVisibility(View.GONE);
notesAudio.setVisibility(View.GONE);
notesText.requestFocus();
focussedEditText = notesText;
notesText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
if(b){
focussedEditText = ((CustomEditText)view);
//Toast.makeText(context, ((CustomEditText) view).getText().toString(), Toast.LENGTH_SHORT).show();
}
}
});
}
else if(customNoteView.getImageUri()!=0){
notesImage.setVisibility(View.VISIBLE);
notesText.setVisibility(View.GONE);
notesAudio.setVisibility(View.GONE);
Glide.with(notesImage.getContext())
.load(notesImage.getContext().getDrawable(customNoteView.getImageUri()))
.into(notesImage);
notesImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(context, FullScreen.class);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity) context,
notesImage,
ViewCompat.getTransitionName(notesImage)
);
context.startActivity(intent, options.toBundle());
}
});
}
else if(customNoteView.getAudioUri()!=null){
notesAudio.setVisibility(View.VISIBLE);
notesImage.setVisibility(View.GONE);
notesText.setVisibility(View.GONE);
notesAudioPlayButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
notesAudioPlayButton.setBackground(context.getDrawable(R.drawable.ic_pause));
notesAudio.setBackground(context.getDrawable(R.drawable.gray_rectangular_background));
notifyItemChanged(viewHolder.getAdapterPosition());
Toast.makeText(context, ""+viewHolder.getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
});
}
}
解决方案
最后,我设法找到了我自己的问题的答案以及没有 UI 更改的根本原因。
错误:
我实际上是在onBindViewHolder(...)
方法中设置点击侦听器。
解决方案:
如果您想notifyItemChanged(position)
在尝试更新点击事件上的回收器视图时避免其他事情,那么您应该在 viewHolder 类中设置点击侦听器,而不是onBindViewHolder
PS: 应用此更改对我来说效果很好。@Blind Kai 的解决方案也有效,但需要刷新视图。我很确定这个更简单有效。不过我很欣赏他的努力。
推荐阅读
- ios - 如何在 iOS 15 及更早版本上支持程序化视图关闭
- rally - 如何在 Rally 中使用 Attributes api 获取实际允许值而不是对其进行引用
- javascript - 我无法在 java-script 中获取“else if”部分代码以进行表单验证
- c++ - 初始化类的静态成员,该成员本身就是子类中的一个类
- android - USB 摄像头与 Android 中的 Innovatrics DOT SDK 集成
- visual-studio-code - 我可以在 Visual Studio 代码中添加自定义默认代码吗
- python - 将 2 个向量的元素转换为矩阵的 Python 乘积
- java - 如何在开发 Harmony 应用程序时将标签内的图像添加为图标?
- unity3d - Unity 2d 中是否有任何功能,当我死时游戏结束屏幕只有在死亡动画完成后才会出现
- reactjs - FIrebase Google Auth 注销错误连接被拒绝