![](/img/trans.png)
[英]Android. How do I keep a button displayed as PRESSED until the action created by that button is finished?
[英]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中顯示“等待動作完成”可繪制對象並不重要(但這會很好...),但是我不想復制布局。 如果僅在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.