- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
目前我有一个 RecyclerView,它带有一个可以具有三种状态的复选框。勾选、未勾选或锁定。
我知道我可以自定义 View 状态。问题是更多地了解 recyclerview View 持有者绑定(bind)的行为。
当 RecylcerView 加载时,一切都按预期工作,除了锁定的项目外,一切都未被选中。当我点击一个未锁定的复选框时,一切正常,它选中该框并取消选中该框。
当我在 recylerview 中点击一个锁定的复选框时,问题就来了。在我点击它之后,我点击之后的每一行都会被锁定,无论它是否被锁定。这可能是我的代码中的一个错误,但也可能是我对 View 持有者绑定(bind)的理解。
这是我设置 View 绑定(bind)的方式:
我有一个 View 选择器,用于为复选框设置 ImageView 。我使用 setSelected 和 setSetActive 给我三个 View 状态:
<?xml version="1.0" encoding="utf-8" ?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_selected="true" android:state_activated="false"
android:drawable="@drawable/check36boxchecked"/>
<item
android:state_selected="false" android:state_activated="false"
android:drawable="@drawable/check36boxunchecked"/>
<item
android:state_selected="true" android:state_activated="true"
android:drawable="@drawable/lock48"/>
<item
android:state_selected="false" android:state_activated="true"
android:drawable="@drawable/lock48"/>
</selector>
然后显然在我的 View 持有者中我将图像设置为选择器。
在 onBindView holder 中我这样设置:
@Override
public void onBindViewHolder(final CreateAlarmLocalAlarmHolder holder, final int position) {
final DownloadAlarmInfo downloadingAlarm = this.alarmToDownload.get(position);
// Set every view holder that is locked to the locked symbol
if (downloadingAlarm.getAlarmFreeorPaid().equals("PAID") && !downloadingAlarm.getAlarmPurchased()){
holder.itemView.setActivated(true);
}
// Update the background with checked or unchecked (keeping track of the selected position)
if (selected_position != 101){
if(selected_position == position){
holder.itemView.setSelected(true);
}else{
holder.itemView.setSelected(false);
}
}
// set click listener
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Update the old position button background
notifyItemChanged(selected_position);
// Change to the new button selected position
selected_position = position;
// Update the new selected position background
notifyItemChanged(selected_position);
// Run the item click listener to play audio or video
itemClickListener.onItemClicked(holder, downloadingAlarm, position);
}
});
谢谢你的帮助
最佳答案
下面几行的问题
// Set every view holder that is locked to the locked symbol
if (downloadingAlarm.getAlarmFreeorPaid().equals("PAID") && !downloadingAlarm.getAlarmPurchased()){
holder.itemView.setActivated(true);
}
// Update the background with checked or unchecked (keeping track of the selected position)
if (selected_position != 101){
if(selected_position == position){
holder.itemView.setSelected(true);
}else{
holder.itemView.setSelected(false);
}
}
您应该使用 else
作为您的 if
条件。因为 View 会重用,所以如果您没有 else
if
,它将保留以前的 View 状态。
所以使用else
作为你的if
。
// Set every view holder that is locked to the locked symbol
if (downloadingAlarm.getAlarmFreeorPaid().equals("PAID") && !downloadingAlarm.getAlarmPurchased()){
holder.itemView.setActivated(true);
}else{
holder.itemView.setActivated(false);
}
// Update the background with checked or unchecked (keeping track of the selected position)
if (selected_position != 101){
if(selected_position == position){
holder.itemView.setSelected(true);
}else{
holder.itemView.setSelected(false);
}
}
else{
//reset your data on views
}
谢谢
关于Android View setActive、setSelected 和 RecyclerView 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48861878/
我已成功创建 HTTP 基本身份验证客户端。 有一个特定的操作,我对其目的有些怀疑。 我尝试了一个简单的 helloworld 脚本的教程,互联网上还有一些其他教程,我看到了这个: options.s
我被这个问题困扰了 3 天,我做了很多研究,但找不到任何答案,这里是对正在发生的事情的简要解释,尝试使用 Firebase 数据库和使用 Unity3D 进行身份验证,这里是步骤: 第一个用户登录,如
我目前正在实现 Google Analytics 增强型电子商务。当我在我的开发环境中购买东西时,我会检查我的开发分析购物行为,我只看到所有 session 和带有事务的 session 中的值,但两
我只想添加一个带有 setAction 参数的 NSButton。 NSRect frame = NSMakeRect(10, 40, 90, 40); NSButton* pushButton =
当尝试打开 Activity 时,我的应用程序在某些设备中崩溃。该问题并不总是发生,仅在某些设备上发生。 @Override protected void onCreate(Bundle savedI
我的游戏中有一个类似于电源对象的对象:当我的玩家输入电源时,它应该激活一个指示电源已被获取的面板,并在 3 秒后该面板应该消失。目前,当我按下电源时,我的面板出现了,但它并没有消失。我正在使用这样的协
我在 Unity 中隐藏 UI 面板时遇到问题。当客户端连接到服务器时调用代码。 void OnPlayerConnected(NetworkPlayer player) { gameObj
我的理解是,您的应用中只能有 1 个 AVAudioSession(因为它是单例,因此您总是收到相同的实例)。 那么,setActive() 函数的作用是什么?因为我只能有一个 session ,所以
我有一个要为其设置操作的表格。我想使用在 bootstrap 中创建的路由在表单文件(扩展Zend_Form)中而不是在 Controller 或 View 中声明操作。 通常,当我想使用路线时,我会
setAction() 到底做了什么?我发现What does setAction () do for intent (Broadcast)但没理解清楚 public void increme
从 unity 项目中学习滚动一个球项目,当玩家与其发生碰撞时拾取器不会移除。它就像透明物体一样穿过它们内部,这是我的代码。 void onTriggerEnter(Collider other) {
TL/DR: 调用 window.setActive(false) 不会将窗口的 active 属性设置为 false。 完整详细信息: 我有以下继承自 Ext.window.Window 的 Ext
我正尝试在 Android 6.0 或更高版本上将我的应用列入白名单。我已经看到 Android 代码可以执行此操作,但它不会在 Xamarin 中进行翻译,Xamarin 文档仅告诉您 SetAct
以下代码呈现一个没有文本的 JButton: public abstract class Test { public static void main(String... args) {
我正在以编程方式制作几个按钮并尝试为每个按钮设置一个 Action ,但我似乎无法让它工作。 在我的 AppController.h 中我有这段代码: ... IBOutlet NSButton* b
调用 MyAlreadyActiveGameObject.SetActive(true) 是否有任何性能问题?一吨,例如每帧一次? 换句话说,是否值得拉 gameObject.active向上检查?或
我想尝试创建一个简单的 cocoa 应用程序。这是一个简单的 reddit 收件箱通知程序。我引入了一堆 URL,并希望为每个 URL 制作带有页面链接的菜单项。我想动态地设置每个 Action 。我
我正在以编程方式在继承 NSObject 的界面内添加工具栏,并实现这些方法: - (NSToolbarItem*)toolbar:(NSToolbar*)toolbar itemForItemId
我使用以下代码以编程方式创建了 NSPopUpButton [myPopUpButton insertItemWithTitle:@"--Select one--" atIndex:0]; [myPo
在我的 iOS 应用程序中,我首先启动 iPod 中的歌曲,然后启动我的应用程序。我在我的应用程序中按下一个按钮,然后调用 AVAudioSession * audioSession = [AVAud
我是一名优秀的程序员,十分优秀!