2016-05-16 3 views
-1

XMLで作成されたボタンをアラートダイアログで使用しようとしていますが、アクティビティの読み込みを試みるとアプリがクラッシュします。onCreateDialogのonClickListenerを使用するとアプリケーションがクラッシュする

package dtt.bob.rsrpechhulp; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.Button; 

public class CallWindow extends DialogFragment implements View.OnClickListener{ 
LayoutInflater inflater; 
View v; 

@Override 
@NonNull 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    Button annuleren = (Button) v.findViewById(R.id.annuleren); //here is the problem I assume 
    annuleren.setOnClickListener(this); 

    inflater = getActivity().getLayoutInflater(); 
    v = inflater.inflate(R.layout.call, null); 
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setView(v); 
    return builder.create(); 
} 

public void onClick(View v) { 
    switch(v.getId()){ 
     case R.id.annuleren: 
      annulerenClick(); 
      break; 
    } 
} 

//annuleren 
private void annulerenClick(){ 
    dismiss(); 
} 

これを修正する方法についてのアイデアはありますか?私は他のアクティビティでonClickListenersを使用しましたが、それらはonCreateDialogメソッドの代わりにonCreateメソッドにありました。あなたは、ビューVをインスタンス化する前に、ボタンのIDを見つけることを試みた

+0

あなたはここでエラーをデバッグ/ペーストしないでください。アプリがクラッシュする無限の理由があります。 –

+0

[Null Pointer Exceptionとは何ですか? http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception-and-how-do-i-fix-it) –

+0

これを確認してください:http://stackoverflow.com/questions/ 25803727/android-setonclicklistener-method-how-does-it-work –

答えて

0

.....

まず、あなたのインフレーターとViewオブジェクト、あなたのボタンをインスタンス化します。

public Dialog onCreateDialog(Bundle savedInstanceState) { 
     inflater = getActivity().getLayoutInflater(); 
     v = inflater.inflate(R.layout.call, null); 
     Button annuleren = (Button) v.findViewById(R.id.annuleren); //here is the problem I assume 
     annuleren.setOnClickListener(this); 


     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setView(v); 
     return builder.create(); 
    } 
+0

おかげで、これはうまくいった! –

1

オブジェクトv(ビュー)をインフレされていなくても、findViewById(...)を呼び出そうとしています。
クラッシュを引き起こしているNullPointerExceptionを取得していると仮定しています。
このリンクをご覧ください。http://www.mkyong.com/android/android-custom-dialog-example/詳細については、こちらをご覧ください。

+0

うん、それは私のスマートではなかった、助けてくれてありがとう –

関連する問題