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" 状态。

我看过关于这个问题的其他主题。但就我而言,其他解决方案对我不起作用,因为:

"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。