Android。如何让按钮显示为 PRESSED,直到该按钮创建的操作完成? Activated/Selected 不可用
Android. How do I keep a button displayed as PRESSED until the action created by that button is finished? Activated/Selected not usable
只要操作未完成,我想将带有状态列表可绘制对象的 ImageButton 保持在 "Wait-for-Action-Finished" 状态。
我看过关于这个问题的其他主题。但就我而言,其他解决方案对我不起作用,因为:
- 我也在 RemoteView 中使用布局(包含按钮)(但不仅限于此)
- 我在具有多选功能的回收视图中使用相同的布局。因此 activated/selected 状态由多选择器实现使用,并且对于状态列表可绘制对象来说是不可能的,除非它没有从选定项传播到子视图 => 我的 butotns
- 使用自定义状态不适用于 RemoteViews
- 无法使用 ToogleButton,因为 setEnabled 在 RemoteViewsButtons/ToggleButtons/CompoundButtons 中不可用
"Wait-for-Action-Finished" 可绘制对象是否显示在 RemoteView 中并不重要(但它会很好...),但我不想复制布局。如果 Wait-State 仅显示在 RecyclerView 项目中也没关系。
但它应该与 Multiselector 功能一起使用。
我正在使用 ImageButton,因为它可以在 RemoteView 中禁用(通常与 Button/ToggleButton/CompoundButton 相反)。
有什么解决办法的提示吗?
您必须手动设置按钮的状态并将其保持在那里。此解决方案将为您提供一些见解
读完你的问题后,我的理解是解决方案如下。
首先将 button.xml 设置为 below.Use 状态 button.Each 的可绘制状态 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);行动。
我通过组合选定状态和激活状态使其正常工作。
我的按钮是这样的:
<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()));
}
这样它既不会与 "click the itemView" 发生冲突,其中选定状态将传播到所有子视图(包括我的按钮),也不会与激活 "multi-selection" 功能发生冲突,其中激活状态将传播到所有子视图。
作业完成后,它将通知 (EventBus) RecyclerView
,其中 ViewHolder
可以将激活状态和选定状态重置回 false。
只要操作未完成,我想将带有状态列表可绘制对象的 ImageButton 保持在 "Wait-for-Action-Finished" 状态。
我看过关于这个问题的其他主题。但就我而言,其他解决方案对我不起作用,因为:
- 我也在 RemoteView 中使用布局(包含按钮)(但不仅限于此)
- 我在具有多选功能的回收视图中使用相同的布局。因此 activated/selected 状态由多选择器实现使用,并且对于状态列表可绘制对象来说是不可能的,除非它没有从选定项传播到子视图 => 我的 butotns
- 使用自定义状态不适用于 RemoteViews
- 无法使用 ToogleButton,因为 setEnabled 在 RemoteViewsButtons/ToggleButtons/CompoundButtons 中不可用
"Wait-for-Action-Finished" 可绘制对象是否显示在 RemoteView 中并不重要(但它会很好...),但我不想复制布局。如果 Wait-State 仅显示在 RecyclerView 项目中也没关系。 但它应该与 Multiselector 功能一起使用。
我正在使用 ImageButton,因为它可以在 RemoteView 中禁用(通常与 Button/ToggleButton/CompoundButton 相反)。
有什么解决办法的提示吗?
您必须手动设置按钮的状态并将其保持在那里。此解决方案将为您提供一些见解
读完你的问题后,我的理解是解决方案如下。 首先将 button.xml 设置为 below.Use 状态 button.Each 的可绘制状态 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);行动。
我通过组合选定状态和激活状态使其正常工作。
我的按钮是这样的:
<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()));
}
这样它既不会与 "click the itemView" 发生冲突,其中选定状态将传播到所有子视图(包括我的按钮),也不会与激活 "multi-selection" 功能发生冲突,其中激活状态将传播到所有子视图。
作业完成后,它将通知 (EventBus) RecyclerView
,其中 ViewHolder
可以将激活状态和选定状态重置回 false。