我希望在一个"等待行动 - 完成"中保留一个带有状态列表drawable的ImageButton。只要行动没有完成就表明。
我已经看到了围绕这个问题的其他主题。但就我而言,其他解决方案对我不起作用,因为:
"等待行动完成"并不重要。 drawable显示在RemoteView中(但它会很好......),但我不想复制布局。如果仅在RecyclerView项目中显示等待状态,那也没关系。 但它应该与Multiselector功能一起使用。
我使用的是ImageButton,因为它可以在RemoteView中禁用(一般与Button / ToggleButton / CompoundButton相反)。
任何提示我如何解决这个问题?
答案 0 :(得分:1)
您必须手动设置按钮的状态并将其保留在那里。此解决方案将为您提供一些见解link
答案 1 :(得分:1)
在读完你的问题之后,我理解解决方案的内容如下所示。 首先将button.xml设置为如下所示。使用它作为该按钮的drawable。状态btn_disabled或btn_pressed中的每一个都是由您定义的按钮的可绘制状态。
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/btn_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_pressed" android:state_selected="true"/>
<item android:drawable="@drawable/btn_default"/>
</selector>
接下来使用下面的代码段。
boolean checkActionOpen = false;
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(!checkActionOpen) {
checkActionOpen = true;
button.setSelected(true);
}
}
});
然后再次完成工作后,您将 checkActionOpen 设置为false并执行 button.setSelected(false); 操作。
答案 2 :(得分:1)
我通过组合选定和激活的状态让它发挥作用。
我的按钮如下所示:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/progress_small" android:state_activated="true" android:state_selected="true"/>
<item android:drawable="@drawable/btn_bookmark_add_pressed" android:state_focused="true" android:state_pressed="true" />
<item android:drawable="@drawable/btn_bookmark_add_pressed" android:state_focused="false" android:state_pressed="true" />
<item android:drawable="@drawable/btn_bookmark_add_pressed" android:state_focused="true" />
<item android:drawable="@drawable/btn_bookmark_add_normal" android:state_focused="false" android:state_pressed="false" />
</selector>
我的button.onClicklistener看起来像这样:
public void onClick(View v) {
if (v.isActivated() && v.isSelected()) {
return;
}
v.setActivated(true);
v.setSelected(true);
AppController.getJobManager().addJob(new Job()));
}
这样它就不会与&#34碰撞;点击itemView&#34;,其中所选状态将传播到所有子视图(包括我的按钮),也不会激活&#34;多个选择&#34;功能,激活状态将传播到所有子视图。
作业完成后,它会通知(EventBus)RecyclerView
,ViewHolder
可以将激活状态和选定状态都重置为假。