gpt4 book ai didi

java - onBackPressed 并调用刷新函数 android

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:24 25 4
gpt4 key购买 nike

当我按下后退按钮时,我只想刷新选项卡栏 Activity 中的一个 fragment 。我怎样才能做到这一点?我尝试了什么

java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentTransaction android.support.v4.app.FragmentManager.beginTransaction()' on a null object reference

fragment 简介

public void refreshFragment(){
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.detach(this).attach(this).commit();
}

编辑个人资料 Activity

@Override
public void onBackPressed() {
super.onBackPressed();
FragmentProfile fragment = new FragmentProfile();
fragment.refreshFragment();
}

最佳答案

虽然它是一个传统的 java.lang.NullPointerException: 但我想在这里澄清一些事情。

1. super.onBackPressed();finish() Activity,因此您不能在其 BackStack 上进行任何交易。

2. 你想刷新 fragment 那么你应该从 FragmentManager 获取当前 fragment 来刷新它。

FragmentProfile fragment = new FragmentProfile();

这将为您提供一个新的 Fragment,它还没有被附加并且调用任何东西都没有任何意义。这就是 FragmentTransaction 为 null 并且 getActivity() 对于新的 Fragment 也将为 null 的原因。

原因 getFragmentManager() 根据定义返回 ActivityFragmentManager。并且您的新 Fragment 尚未附加,因此它将返回 null。

getFragmentManager() Return the FragmentManager for interacting with fragments associated with this fragment's activity.

因此您的代码应如下所示。

 @Override
public void onBackPressed() {
if(SomeCondition) {
FragmentProfile fragment = //Get the Fragment from Fragment Manager Here
fragment.refreshFragment();
}else {
super.onBackPressed();
}
}

我在 onBackPressed() 中设置了一个条件,因为您不想完全禁用后退按钮。如果您使用 Layout 作为 Fragment 的容器,您可以通过 Activity 中的两种方法获取 Fragment。

getSupportFragmentManager().findFragmentById();
getSupportFragmentManager().findFragmentByTag();

编辑:- 问题不够清楚。 OP 想要实现的目标可以简单地通过 startActivityForResult(); 完成。请看How to manage startActivityForResult on Android? .

关于java - onBackPressed 并调用刷新函数 android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51183562/

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