java - 在 fragment 中追加文本的方法导致空指针

标签 java android android-layout android-fragments

我试图在同一 Activity 中单击另一个 fragment 的按钮时更改 fragment 的 TextView 中的文本。

onCreateView 在类的顶部返回

public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.deckbuilder_fragment, container,
            false);

    return view;
}

我在 onCreateView 和 onStart 之间的任何方法之外声明了 TextView

TextView deckSize;

相同的代码在onCreateView和deckSize()之间的onStart方法中工作正常。

public void onStart() {
    super.onStart();
deckSize = (TextView) getView().findViewById(R.id.decksize);
    final SharedPreferences defaultDeck = getActivity()
            .getSharedPreferences("defaultDeck", Context.MODE_PRIVATE);
    deckSize.setText(String.valueOf(defaultDeck.getInt("decksize", 0)));

}

但是空指针出现在第 180 行

public void deckSize() {
    deckSize = (TextView) getView().findViewById(R.id.decksize);  //line 180
    final SharedPreferences defaultDeck = getActivity()
            .getSharedPreferences("defaultDeck", Context.MODE_PRIVATE);
    deckSize.setText(String.valueOf(defaultDeck.getInt("decksize", 0)));
}

这是编码到 TextView 所在 fragment 中的方法。我在该 fragment 的 XML 布局文件中内置了 TextView。奇怪的是,该方法内部的确切代码也在类树中同一 fragment 的 onStart 方法中,并且工作正常。我在 onStart 方法之前在类中进一步声明了 TextView DeckSize。这是相关的 logcat 文本。

FATAL EXCEPTION: main
java.lang.NullPointerException
at com.maliciousgames.deckbuilder.DeckBuilderFragment.deckSize(DeckBuilderFragment.java:180)
at com.maliciousgames.deckbuilder.DeckBuilder.deckSize(DeckBuilder.java:35)
at com.maliciousgames.deckbuilder.BlockCardBrowserFragment$2.onClick(BlockCardBrowserFragment.java:105)
at android.view.View.performClick(View.java:4240)
at android.view.View$PerformClick.run(View.java:17721)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)

第180行就是这一行

deckSize = (TextView) getView().findViewById(R.id.decksize);

我正在从父 Activity 中的方法调用此 DeckSize 方法

public void deckSize() {

    DeckBuilderFragment deckBuilderFragment = new DeckBuilderFragment();
    deckBuilderFragment.deckSize();
}

我正在从驻留在同一父 Activity 中的另一个 fragment 调用父 Activity 中的该方法,如下所示

((DeckBuilder) getActivity()).deckSize();

我对 Android 和 Java 还很陌生,非常感谢任何人能够提供的任何帮助或指导。

最佳答案

您正在调用

deckBuilderFragment.deckSize();

就在之后

 DeckBuilderFragment deckBuilderFragment = new DeckBuilderFragment();

所以 onCreateView() 尚未被调用,因此您从未膨胀您的 View ,因此当您调用 deckBuilderFragment.deckSize(); getView( ) 返回 null

关于java - 在 fragment 中追加文本的方法导致空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19148632/

相关文章:

java - 通过ip地址连接

java - OpenAM 与 Maven

java - 如何在jar文件中使用类文件?

android - 如何为 android 2.2 或 2.3 创建自定义堆栈 View

android - 水平 ScrollView 左右箭头显示问题?

Java 可编辑的 JCombobox Keylistener Enter 键事件

android - 资源$NotFoundException : String resource ID #0x0 with Toast. makeText

android - 如何将自定义 View /布局固定在 CollapsingToolbarLayout 中?

android - OnItemClickListener 和自定义 OnTouchListener

android - 在锁定屏幕上显示 UI(Activity/WindowManager)并支持 Oreo