gpt4 book ai didi

Android MVVM - 如何在 ViewModel 中引用 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:26 28 4
gpt4 key购买 nike

MVVM 架构,

这是我的 View ( Activity ):

private MyApp app;
private MainActivityVM viewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = (MyApp) this.getApplication();
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

MainActivityVM.Factory factory = new MainActivityVM.Factory(app);

final MainActivityVM model = ViewModelProviders.of(this, factory)
.get(MainActivityVM.class);

viewModel = model;
binding.setVm(viewModel);
viewModel.onCreate();

和 View 模型:

public class MainActivityVM extends AndroidViewModel implements ViewModel {

public MainActivityVM(@NonNull Application application) {
super(application);
}

@Override public void onCreate() {
model = new MyService();
model.getData(); /* <-- how do i pass the activity here? */
}

@Override public void onPause() { }

@Override public void onResume() { }

@Override public void onDestroy() { }

public static class Factory extends ViewModelProvider.NewInstanceFactory {

@NonNull
private final Application mApplication;

public Factory(@NonNull Application application) {
mApplication = application;
}

@Override
public <T extends android.arch.lifecycle.ViewModel> T create(Class<T> modelClass) {
return (T) new MainActivityVM(mApplication);
}
}
}

和模型:

public class myService{

public getData(){
if(permissionacquired(){
getdata()
}else{
requestPermission();
}
}

private void requestPermission() {
PermissionKey permKey = new PermissionKey(HealthConstants.StepCount.HEALTH_DATA_TYPE, PermissionType.READ);
HealthPermissionManager pmsManager = new HealthPermissionManager(mStore);
try {
// Show user permission UI for allowing user to change options

/* BELOW CODE REQUIRE Activity reference to PASS */

pmsManager.requestPermissions(Collections.singleton(permKey), MainActivity.this).setResultListener(result -> {

/* ABOVE CODE REQUIRE Activity reference to PASS */

Log.d(APP_TAG, "Permission callback is received.");
Map<PermissionKey, Boolean> resultMap = result.getResultMap();

if (resultMap.containsValue(Boolean.FALSE)) {
updateStepCountView("");
showPermissionAlarmDialog();
} else {
// Get the current step count and display it
mReporter.start(mStepCountObserver);
}
});
} catch (Exception e) { Log.e(APP_TAG, "Permission setting fails.", e); }
}

}

编辑:如果您在我的模型中看到我的请求权限,API 需要通过 Activity - 我如何将 Activity 引用传递给请求权限?

我有一个来自模型的获取权限方法。这个从我的服务提供商那里获得许可的方法需要 Activity ,例如requestPermission( Activity )

所以在我的 ModelView 中,我有一个模型对象,它是来自另一个来源的数据服务。

那么,我如何在我的 ViewModel 中引用 Activity 以便我可以在我的 ViewModel 中调用:model.requestPermission(Activity);

了解自here那:

Caution: A ViewModel must never reference a view, Lifecycle, or any class that may hold a reference to the activity context.

最佳答案

只要您在 onCreate() 方法中需要权限,您只需将具有权限请求的逻辑移动到 Activity 中,并将请求结果传递到 viewModel。

关于Android MVVM - 如何在 ViewModel 中引用 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48398723/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com