如何将安卓按钮的启用属性绑定到视图模型



我对Android开发有点陌生,现在正在维护一个使用"android绑定"框架来利用MVVM模式的项目。

我想在用户按下 Android 按钮后禁用它,以防止双击。 我更愿意通过以某种方式将按钮的"启用"属性绑定到 ViewModel 来做到这一点。 我猜我需要对某些属性使用"绑定:启用",但我不确定代码应该是什么样子。

我的按钮的 xml 如下所示:

<Button 
android:drawableTop="@drawable/sync_action"
android:layout_height="wrap_content" 
android:textColor="@color/title_text"
android:id="@+id/syncButton" 
style="@style/ActionButton" 
android:text="@string/syncSyncActionHeader"
binding:enabled="isSyncEnabled"
binding:onClick="beginSync"/>

我的视图模型类看起来像...

public class SyncViewModel{
   public final Command beginSync   = new Command(){
        @Override
        public void Invoke(View arg0, Object... arg1) {
            //do Sync stuff
        }
    };
   //WHAT GOES HERE?  Want to bind button's enabled property to a boolean.  
}

请让我知道在代码的"这里是什么"部分放什么。

防止双击 UI 按钮的解决方案

不是禁用 UI 按钮。 解决方案是让按钮使用 AsyncTask 来执行其职责,并在允许再次执行之前检查该 AsyncTask 的状态。

同步屏幕.xml

<Button 
android:id="@+id/syncButton" 
style="@style/ActionButton" 
android:text="@string/syncText"
binding:onClick="beginSync"/>

同步视图模型.java

public class SyncViewModel
{
...
public final Command beginSync = new Command(){
    private SyncAsyncTask task;
    @Override
    public void Invoke(View arg0, Object... arg1) {
        if( task == null || task.getStatus() == Status.FINISHED )
        {
            task = new CustomAsyncTask(customParams);
            task.execute();
        }
    }
};
public class CustomAsyncTask extends AsyncTask<Void, Void, String>{
    ....
    //Irrelevant implementation details
    ....
}

相关内容

  • 没有找到相关文章

最新更新