【发布时间】:2017-05-15 15:11:49
【问题描述】:
我对 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");
我的日志猫:
05-15 10:56:42.406 4109-4109/com.archronix.infotainment E/AndroidRuntime: FATAL EXCEPTION: main 进程:com.archronix.infotainment,PID:4109 java.lang.RuntimeException:无法启动活动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.access$800(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.access$800(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 篇关于类似主题的堆栈溢出帖子,但似乎都已过时或不一致。完成我的任务的最佳方式是什么?谢谢。
【问题讨论】:
-
我已阅读该帖子。而且我了解 NullPointerExceptions 是如何工作的,我的问题是我似乎无法确定我的代码中出现问题的位置和变量。
-
您可以为此使用调试器
-
如您所见,调试器告诉我它正在调用 from 方法。我不知道为什么会调用 NullPointerException。我希望我能很好地理解 android 方法,以便能够追踪我的问题,但遗憾的是我没有。很抱歉,如果有可用的解决方案,我不确定还要搜索什么。
-
谢谢,我会调查的。
标签: android user-interface fragment fragmentmanager