2017-05-15 8 views
-4

とのコミュニケーション、私はUIの基本構造を学ぶことができますし、コミュニケーションやレイアウトがどのように動作するかを場所を探してきました。しかし、関係なく。私の問題は、フラグメント内のTextViewの値を変更しようとしていることから来ています。私は値を変更しようとするとnullPointerExceptionを取得し続けます。私は断片を参照するために断片マネージャを使用しています。ここで私はAndroidのUIに非常に新しいです、フラグメント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を:

5月15日10 :56:42.406 4109-4109/com.archronix.infotainment E/AndroidRuntime:致命的除外:メイン プロセス:com.archronix.infotainment、PID:4109 java.lang.RuntimeException:アクティビティを開始できませんでしたComponentInfo {com.archronix。インフォテインメント/ com.archronix.infotainment.MainActivity}:java.lang.NullPointerExceptionが:アンドロイドでヌルオブジェクト参照 に「ボイドcom.archronix.infotainment.Fragment1.postText(java.lang.String)を」仮想メソッドを起動しようとしています。 android.appでandroid.app.ActivityThread.access $ 800(ActivityThread.java:144) でandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) でapp.ActivityThread.performLaunchActivity(ActivityThread.java:2298) .ActivityThread $ H.handleMes sage(ActivityThread.java:1278) (andler.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) android.app.ActivityThread.main ActivityThread.java:5221) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 原因:java.lang.NullPointerException:仮想メソッド 'void com。 archronix.infotainment.Fragment1.postText(java.lang.String) 'のullオブジェクトリファレンス at com.archronix.infotainment.MainActivity.onCreate(MainActivity.java:102) at android.app.Activity.performCreate(Activity.java:5933) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java) :1105)android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360でandroid.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251で ) )android.app.ActivityThread.access $ 800(ActivityThread.javaで : android.os.Handler.dispatchMessageでandroid.app.ActivityThread $ H.handleMessage(ActivityThread.java:1278) (Handler.java:102)における144) 01ジャワでjava.lang.reflect.Method.invoke(ネイティブメソッド) でandroid.app.ActivityThread.mainでandroid.os.Looper.loop(Looper.java:135) (ActivityThread.java:5221) で.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os。com.android.internal.os.ZygoteInit.mainでZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899) (ZygoteInit.java:694)私のnewbienessため

謝罪。私は似たような話題に関する20のスタックオーバーフローポストを読んだが、すべて古くなっているか一貫していないようだ。私の仕事を達成する最良の方法は何ですか?ありがとうございました。 onCreateView

+0

私は投稿を読んでいます。そして、私はNullPointerExceptionsの仕組みを理解しています。私の問題は、どこでどの変数を使って自分のコードで問題が発生したのかを特定することができます。 –

+0

そのためにデバッガを使用することができます – Daniele

+0

ご覧のとおり、デバッガは、からのメソッドの呼び出し中であることを通知します。なぜ私はNullPointerExceptionを呼び出すのか分かりません。私は私の問題を辿ることができるほど十分にアンドロイドメソッドを理解してもらいたいが、悲しいことに私はそうしない。利用可能なソリューションがある場合はごめんなさい、私は他に何を検索するか分からない。 –

答えて

0

あなたはそうのようなあなたのTextViewを初期化する必要があります。

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

あなたは、あなたがバンドルを使用することができますFragmentTransaction前に設定したいテキストを知っていれば(How to transfer some data to another Fragment?

+0

ありがとうございます!アプリケーションの実行中にonCreateだけでなくバンドルを複数回実行することはできますか? –

+0

バンドルは、画面の向きが変わり、値を保存したいとき(アクティビティが破棄されて再作成されるため)にも使用されます。 –

+0

一般に、バンドルは、アクティビティAからアクティビティBへ、またはフラグメント間でデータを転送するために使用されます。 –

1

状態変数ではありません任意のテキストビューに割り当てられます。 return文の前にonCreateViewに次のコードを追加してください。

status=v.findViewById(R.id.<nameoftextview>); 
関連する問題