2016-05-15 3 views
1

XMLからのあらゆる種類のビューで動作することがわかっていますが、プログラムで作成したビューを使用するとどうして機能しないのですか?ここでプログラムで作成したときにSnackbarがNullPointerExceptionでクラッシュするView

は私のコードです:ここでは

TextView tv = new TextView(getApplicationContext()); 
Snackbar snackbar = Snackbar.make(tv, "Welcome to AndroidHive", Snackbar.LENGTH_LONG); 
snackbar.show(); 

は私のエラーです:

*Process: com.cloudents.mysnackbar, PID: 9924 
java.lang.NullPointerException 
    at android.support.design.widget.Snackbar.<init>(Snackbar.java:180) 
    at android.support.design.widget.Snackbar.make(Snackbar.java:206) 
    at com.cloudents.mysnackbar.MainActivity$2.onClick(MainActivity.java:39) 
    at android.view.View.performClick(View.java:4442) 
    at android.view.View$PerformClick.run(View.java:18473) 
    at android.os.Handler.handleCallback(Handler.java:733) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5105) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 
    at dalvik.system.NativeStart.main(Native Method)* 
+0

'Snackbar 'に渡す' View'は画面上の階層にアタッチする必要があります。親の親を見つけようとするとNPEを投げていると思います。 –

答えて

1

あなただけSnackBarを表示するためにインスタンス化TextViewを、使用することはできません。必要なのはです。Viewです。あなたが何も持っていないか、あなたがどちらが合格するのかわからない場合は、直接使用してください。android.R.id.content

などです。動的TextViewを作成した場合

Snackbar.make(findViewById(android.R.id.content), "Welcome to AndroidHive", Snackbar.LENGTH_LONG).show(); 
+0

ありがとう 他のユーザーにはわかりやすいように コードは次のようになります。 – ediBersh

1

はい、確かにあなたは、その後

TextView tv = new TextView(getApplicationContext()); 
     tv.setText("Button"); 
     tv.setId(5); 
((LinearLayout) findViewById(R.id.myLinearLayout)).addView(tv); 

はあなたが簡単に行うことができ、ここのように、あなたの Snackbarを表示するようにしようとする前、あなた Layout

を追加することができます
Snackbar snackbar = Snackbar.make(tv, "Welcome to AndroidHive", Snackbar.LENGTH_LONG); 
     snackbar.show(); 

スナックバーが表示されます。

1

でビュー:

Snackbar snackbar = Snackbar.make(view, "Welcome to AndroidHive",Snackbar.LENGTH_LONG); 
snackbar.show(); 

あなたはスナックバーのビューを追加したい先の図であり、@Blackbeltは前述したように、あなただけのスナックバーを追加したい場合は、それはこれだけスナックバーそのものではありません活動への一方で、あなたのようなものになりますスナックバービュー自体にいくつかのコンテンツを変更したい場合はfindViewById(android.R.id.content)を使用します。また

Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Welcome to AndroidHive",Snackbar.LENGTH_LONG); 

View snackbarView = snackbar.getView() 
TextView snackTextView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text); 
snackTextView.setTextColor(CUSTOMCOLOR); 
// modify anything you want in the view here 
snackbar.show(); 

を私はしたいと思いますメインレイアウトにコーディネーターレイアウトを追加して、そのため、ユーザーはスワイプバーを閉じるためにスワイプする機能を持っています。

関連する問題