与片段 NullPointerException 通信

Communicating with fragment NullPointerException

我是 Android UI 的新手,我一直在寻找可以学习 UI 基本结构以及沟通和布局应该如何工作的地方。但无论如何。我的问题来自于我试图更改片段中 TextView 的值。当我尝试更改值时,我不断收到 nullPointerException。我正在使用片段管理器来引用片段。

这是片段代码:

package com.archronix.infotainment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class Fragment1 extends android.support.v4.app.Fragment {
public TextView status;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_fragment1, container, 
    false);
    return v;
}

public static Fragment1 newInstance() {
    Fragment1 f = new Fragment1();
    return f;
}

public void postText(String str){
    status.setText(status.getText()+"\n"+str);
}
}

这就是我声明片段管理器的方式:

fragment1 = (Fragment1) 
getSupportFragmentManager().findFragmentById(R.id.fragment1);

以及我如何使用它:

fragment1.postText("testtext");

我的logcat:

05-15 10:56:42.406 4109-4109/com.archronix.infotainment E/AndroidRuntime:致命异常:main 进程:com.archronix.infotainment,PID:4109 java.lang.RuntimeException: 无法启动 activity ComponentInfo{com.archronix.infotainment/com.archronix.infotainment.MainActivity}: java.lang.NullPointerException: 尝试调用虚拟方法 'void com.archronix.infotainment.Fragment1.postText(java.lang.String)' 在空对象引用上 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) android.app.ActivityThread.access800 美元(ActivityThread.java:144) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5221) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 原因:java.lang.NullPointerException:尝试在空对象引用上调用虚方法 'void com.archronix.infotainment.Fragment1.postText(java.lang.String)' 在 com.archronix.infotainment.MainActivity.onCreate(MainActivity.java:102) 在 android.app.Activity.performCreate(Activity.java:5933) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) android.app.ActivityThread.access800 美元(ActivityThread.java:144) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5221) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

为我的新手道歉。我已经阅读了 20 篇有关类似主题的堆栈溢出帖子,但所有帖子似乎都已过时或不一致。完成任务的最佳方法是什么?谢谢。

onCreateView 中,您应该像这样初始化您的 TextView:

status = (TextView) v.findViewById(R.id.tv_status);

如果您知道要在 FragmentTransaction 之前设置的文本,则可以使用 Bundle (How to transfer some data to another Fragment?)

状态变量未分配给任何文本视图。 在return语句

之前的onCreateView中添加如下代码
status=v.findViewById(R.id.<nameoftextview>);