簡體   English   中英

將文本追加到片段中導致空指針的方法

[英]method to append text in fragment causing null pointer

我試圖在同一活動中單擊另一個片段的按鈕時更改該片段的文本視圖中的文本。

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所在片段中的方法。我在XML布局文件中為此片段內置了TextView。 奇怪的是,此方法中的確切代碼也位於類樹中同一片段的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);

我正在從父活動中的方法調用此deckSize方法

public void deckSize() {

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

我從另一個像這樣的父活動中駐留的片段中的父活動中調用該方法

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

我對Android和Java還是很陌生,非常感謝任何人都能提供的任何幫助或指導。

你在打電話

deckBuilderFragment.deckSize();

之后

 DeckBuilderFragment deckBuilderFragment = new DeckBuilderFragment();

因此onCreateView()尚未被調用,因此您從未誇大視圖,因此在調用deckBuilderFragment.deckSize(); getView()返回null

好吧,我能夠通過一個關於SO的措辭不同的問題獲得幫助。 伊曼紐爾能夠為我指出正確的方向。 我正在回答這個問題,以幫助在類似情況下可能遇到的其他任何人。

要將文本追加到第一個片段的textview中,只需通過main(或父)活動內的public方法,然后在第二個片段中對其進行調用即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM