Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上的简单MVVM架构,Java上的AndroidX_Java_Android_User Interface_Mvvm_Androidx - Fatal编程技术网

Android上的简单MVVM架构,Java上的AndroidX

Android上的简单MVVM架构,Java上的AndroidX,java,android,user-interface,mvvm,androidx,Java,Android,User Interface,Mvvm,Androidx,我真的很恼火试图弄明白frick如何创建一个简单的MVVM模式Android活动 我想要的只是将一个视图模型公共方法(它打印一个“Eureka!”日志)绑定到一个按钮(使用onClick操作) 为了实现这一目标,我从现在起所做的是: data\u activity.xml DataViewModel.java 打包it.XXXXX.XXXXX.ui.data; 导入android.util.Log; 导入androidx.lifecycle.ViewModel; 公共类DataViewMo


我真的很恼火试图弄明白frick如何创建一个简单的MVVM模式Android活动

我想要的只是将一个视图模型公共方法(它打印一个“Eureka!”日志)绑定到一个按钮(使用onClick操作)


为了实现这一目标,我从现在起所做的是:

data\u activity.xml


DataViewModel.java

打包it.XXXXX.XXXXX.ui.data;
导入android.util.Log;
导入androidx.lifecycle.ViewModel;
公共类DataViewModel扩展了ViewModel{
公开无效测试(){
Log.d(“test”,“EUREKA!”);
}
}
DataActivity.java

打包it.XXXXX.XXXXX.ui.data;
导入androidx.appcompat.app.appcompat活动;
导入androidx.lifecycle.ViewModelProvider;
导入android.os.Bundle;
导入它。XXXXX.XXXXX.R;
公共类DataActivity扩展了AppCompatActivity{
私有数据视图模型mViewModel;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.data_活动);
this.mViewModel=newviewmodelprovider(this.get)(DataViewModel.class);
}
}

…最后(因为我正在处理一个现有的应用程序),我使用以下命令调用视图:

。。。
((按钮)this.findviewbyd(R.id.btndaasync2)).setOnClickListener(新的OnClickListener(){
公共void onClick(视图arg0){
意图i=新意图(MainActivity.this、DataActivity.class);
主要活动。这。startActivity(i);
}
});
...

预期的行为是通过按下DataView(已加载)来读取日志,但什么也没有发生(按钮按下动画除外)。

有人知道问题出在哪里吗?

提前谢谢你

在Android应用程序中启用数据绑定的步骤:

  • 在“gradle.properties”文件中添加
    android.databinding.enableV2=true

  • 在android部分的应用程序“build.gradle”文件中添加
    数据绑定{enabled=true}

  • 在Android Studio中运行gradle同步和构建
  • 更新

    我忘了告诉您必须修改
    onCreate
    方法,如下所示:

    package it.XXXXX.XXXXX.ui.data;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.databinding.DataBindingUtil;
    
    import android.os.Bundle;
    
    import it.XXXXX.XXXXX.R;
    import it.XXXXX.XXXXX.databinding.DataActivityBinding;
    
    public class DataActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            DataViewModel mViewModel = new DataViewModel();
    
            DataActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.data_activity);
            binding.setViewModel(mViewModel);
        }
    }
    

    在Android应用程序中启用数据绑定的步骤:

  • 在“gradle.properties”文件中添加
    android.databinding.enableV2=true

  • 在android部分的应用程序“build.gradle”文件中添加
    数据绑定{enabled=true}

  • 在Android Studio中运行gradle同步和构建
  • 更新

    我忘了告诉您必须修改
    onCreate
    方法,如下所示:

    package it.XXXXX.XXXXX.ui.data;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.databinding.DataBindingUtil;
    
    import android.os.Bundle;
    
    import it.XXXXX.XXXXX.R;
    import it.XXXXX.XXXXX.databinding.DataActivityBinding;
    
    public class DataActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            DataViewModel mViewModel = new DataViewModel();
    
            DataActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.data_activity);
            binding.setViewModel(mViewModel);
        }
    }
    

    我发现我没有正确绑定
    活动中的
    视图模型


    DataActivity.java

    公共类DataActivity扩展了AppCompatActivity{
    私有数据视图模型mViewModel;
    私有数据活动绑定mBinding;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    this.mViewModel=新的DataViewModel();
    this.mBinding=DataBindingUtil.setContentView(this,R.layout.data_活动);
    this.mBinding.setViewModel(this.mViewModel);
    }
    }
    


    希望这能帮助别人




    谢谢你的建议

    我发现我没有从
    活动
    正确绑定
    视图模型


    DataActivity.java

    公共类DataActivity扩展了AppCompatActivity{
    私有数据视图模型mViewModel;
    私有数据活动绑定mBinding;
    @凌驾
    创建时受保护的void(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    this.mViewModel=新的DataViewModel();
    this.mBinding=DataBindingUtil.setContentView(this,R.layout.data_活动);
    this.mBinding.setViewModel(this.mViewModel);
    }
    }
    


    希望这能帮助别人



    谢谢你的建议