gpt4 book ai didi

java - 尝试将文本设置为 fragment 中 Activity 中的 TextView 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 22:30:10 25 4
gpt4 key购买 nike

我在 Activity 类的顶部创建这样的变量:

private TextView label;

我在 onCreate 方法中像这样分配 textView:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);

label = (TextView) findViewById(R.id.label);
}

在 Activity 中我有这个功能:

public void changeLabel(String label){
label.setText(label);
}

然后在附加到 Activity 的 fragment 中,在 onAttach 方法内部执行以下操作:

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
((ParentActivity)activity).changeLabel("New label");
}

但是我在 Activity 的 ChangeLabel 函数内部收到 NullPointerException,这是错误:

01-15 10:44:43.090  28800-28800/com.app.example E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.app.example, PID: 28800
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.example/com.app.example.ParentActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202)
...
Caused by: java.lang.NullPointerException
at com.app.example.Parentacitvity.changeLabel(Home.java:269)
at com.app.example.HomeFragment.onAttach(ChildFragment.java:33)
...
at android.app.Activity.onCreate(Activity.java:907)
at com.app.example.ParentActivity.onCreate(Home.java:68)
...

只有当我在应用程序外部执行多个任务后返回应用程序时,才会发生这种情况,因此我认为该函数可能是在 Activity 中调用 onCreate 之前由 fragment 调用的。有什么建议吗?

最佳答案

当您在 Activity 中调用 super.onCreate() 时, fragment 会恢复,如调用堆栈中所示。仅在调用 super.onCreate() 之后才初始化 label

作为一个快速解决方案,您可以将标签设置推迟到 fragment 生命周期的后期,例如 onActivityCreated()

一般来说, fragment 不应该关心它所附加的 Activity 的细节。将 Activity 转换为特定类型是一种代码味道。考虑重新设计您的方法,以便 fragment 只需要关注自己的 UI,并让包含的 Activity 处理自己的 UI。

关于java - 尝试将文本设置为 fragment 中 Activity 中的 TextView 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27967424/

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