gpt4 book ai didi

java - 停止 fragment 的函数和调用并重置内部变量

转载 作者:行者123 更新时间:2023-12-01 18:16:14 25 4
gpt4 key购买 nike

在我的应用程序中,我有一个 Activity 和一个 fragment 。

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

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

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

  • 我在 fragment 中有一个 GetRequest(request) 函数。

  • 在 Activity 中,我调用此函数,修复参数请求 == B。

  • 在 fragment 的每个函数中,我在这些函数的开头都有一个条件来检查 if (request != null)。然后,如果 request != null 我会调用 fragment 中的一个函数来重新启动所有内部变量,并调用第一个函数等。否则,我会正常继续执行代码。

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

我确信这不是实现这一目标的最佳方法。你能帮我一下吗?

谢谢!

最佳答案

我建议您使用LiveDataViewModel在这种情况下

例如:

首先创建一个ViewModel

YourViewModel.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")
}

然后在您的 fragment 中,观察参数A的值

您的 fragment :

  // 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的变化时在activity中,fragment会异步获取更新,然后你可以用 onChanged() 中的更新值做任何你想做的事情。部分。

正如您在评论中提到的:

receive files (reads from a database), variables, arrays

LiveData也可以用于自定义模型类,例如 MutableLiveData<List<Post>> ,所以当你 setValue()activity ,您的 fragment 可以在 onChanged() 中获取异步值.

使用之前LiveData ,您需要Add Components to your Project

这是Android MVVM架构,可以看文档here ,,示例 here

关于java - 停止 fragment 的函数和调用并重置内部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60360930/

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