与片段 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>);
我是 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>);