Android系统。在按钮创建的操作完成之前,如何将按钮显示为PRESSED?激活/选择不可用

时间:2015-04-24 17:18:47

标签: android button selection remoteview

我希望在一个"等待行动 - 完成"中保留一个带有状态列表drawable的ImageButton。只要行动没有完成就表明。

我已经看到了围绕这个问题的其他主题。但就我而言,其他解决方案对我不起作用,因为:

  • 我也在RemoteView中使用布局(包含按钮)(但不仅仅是那里)
  • 我在具有多选功能的recyclerview中使用相同的布局。因此,激活/选择状态由多选择器实现使用,并且对于状态列表可绘制是不可能的,除了它没有从选择项传播到子视图=>我的屁股
  • 使用自定义状态不使用RemoteViews
  • 无法使用ToogleButton,因为setEnabled不适用于RemoteViews中的Buttons / ToggleButtons / CompoundButtons

"等待行动完成"并不重要。 drawable显示在RemoteView中(但它会很好......),但我不想复制布局。如果仅在RecyclerView项目中显示等待状态,那也没关系。 但它应该与Multiselector功能一起使用。

我使用的是ImageButton,因为它可以在RemoteView中禁用(一般与Button / ToggleButton / CompoundButton相反)。

任何提示我如何解决这个问题?

3 个答案:

答案 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)RecyclerViewViewHolder可以将激活状态和选定状态都重置为假。