首页 > 解决方案 > 停止片段的函数和调用并重置内部变量

问题描述

在我的应用程序中,我有一个活动和一个片段。

该片段与活动给出的参数“A”一起使用。它有自己的数组等。片段在不同的函数之间移动(从一个函数到另一个函数),它还调用异步函数来接收文件、从数据库读取等。

情况是,我希望在我按下 mi 活动中的按钮的具体时刻,从我的主要活动向片段发送通知以停止所有处理并从原始参数“B”开始该过程。即重启fragment中的所有变量,停止当前运行的所有函数,以及所有异步函数等,以b参数启动fragment中的整个过程。

我的解决方案,不起作用如下:

问题是我认为这不适用于异步函数,因为有时我在变量中收到错误,我重置为 null 并且他们正在尝试读取,等等。

我确信这不是实现这一目标的最佳方式。请你帮助我好吗?

谢谢!

标签: javaandroidandroid-studioandroid-fragmentsandroid-activity

解决方案


我会建议你在这种情况下使用LiveDatawithViewModel

例如:

首先创建一个ViewModel

你的ViewModel.java:

//initialize this mutableLiveData first
public MutableLiveData<String> parameterA = new MutableLiveData<>("");

private void setParameterA(String myValue){
    parameterA.setValue(myValue);
}

然后在YourActivity.java中,获取ViewModel

YourViewModel viewModel;

@Override
protected void onCreate(Bundle savedInstanceState) {

   ... all other thing 

   viewModel = ViewModelProviders.of(this).get(YourViewModel.class);
}


//then whatever the situation in activity,u want to update parameterA
private void SomeSituation() {
    //update the parameterA
    ...
    viewModel.setParameterA("Your value Here")
}

然后在你的片段中,观察参数A的值

你的片段:

  // in onCreate() or onViewCreated()

@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState); 

  //get the same viewModel
  viewModel = ViewModelProviders.of(requireActivity()).get(YourViewModel.class);


  viewModel.parameterA.observe(getViewLifecycleOwner(), new Observer<String>() {
        @Override
        public void onChanged(String parameterA) {
            // anything changes on parameterA
            // do whatever you want with the value S
        }
    });
 }

所以通过上面的方法,只要parameterA在活动中发生变化,片段就会异步更新,然后你可以对onChanged()节内的更新值做任何你想做的事情。

正如您在评论中提到的:

接收文件(从数据库读取)、变量、数组

LiveData也可以用于自定义模型类,例如MutableLiveData<List<Post>>,因此当您setValue()进入时activity,您的片段可以在中获取值 asynchornous onChanged()

在使用之前LiveData,您需要将组件添加到您的项目中

这是 Android MVVM 架构,您可以在此处查看文档此处为示例


推荐阅读