簡體   English   中英

Android系統。 在該按鈕創建的操作完成之前,如何保持按鈕顯示為“按下”狀態? 激活/選擇不可用

[英]Android. How do I keep a button displayed as PRESSED until the action created by that button is finished? Activated/Selected not usable

我想將帶有狀態列表的ImageButton保持在“等待動作完成”狀態,只要動作未完成即可。

我已經看到了有關此問題的其他主題。 但就我而言,其他解決方案對我不起作用,原因是:

  • 我也在RemoteView中使用布局(包含按鈕)(但不僅限於此)
  • 我在具有Multi-Selection功能的recyclerview中使用相同的布局。 因此,激活/選定狀態由多選擇器實現使用,對於狀態列表可繪制狀態是不可能的,除非狀態列表未從選定項傳播到子視圖=>我的按鈕
  • 使用自定義狀態不適用於RemoteViews
  • 無法使用ToogleButton,因為setEnabled不適用於RemoteViews中的Buttons / ToggleButtons / CompoundButtons

在RemoteView中顯示“等待動作完成”可繪制對象並不重要(但這會很好...),但是我不想復制布局。 如果僅在RecyclerView項目中顯示“等待狀態”,則可以。 但是,它應該與Multiselector函數一起使用。

我使用ImageButton是因為可以在RemoteView中將其禁用(通常與Button / ToggleButton / CompoundButton相反)。

有什么提示可以解決這個問題嗎?

您將必須手動設置按鈕的狀態並將其保持在該位置。 該解決方案將為您提供一些見識鏈接

讀出您的問題后,我所理解的解決方案將如下所示。 首先按如下所示設置button.xml,將其用作該按鈕的可繪制狀態,狀態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()));
}

這樣,它既不會與“單擊itemView”沖突,在選中狀態將傳播到所有子視圖(包括我的按鈕),也不會激活“多選”功能,在該功能中激活狀態將傳播到所有子視圖觀點。

作業完成后,它將通知(EventBus) RecyclerView ,其中ViewHolder可以將激活狀態和選定狀態重置為false。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM