2017-01-02 24 views
1

次のコードはボタンのonClickメソッドで実行され、ダイアログボックスを表示します。私はテキストを入力してokを押すことができますが、Log.dに示されているように、Stringファイル名は常にnullです。私はなぜなのか理解していない。EditTextダイアログの入力は常にnull(Android)

ダイアログボックスに入力するテキストを保存するにはどうすればよいですか?

私のコードはアクティビティ(フラグメントなし)で実行され、文字列ファイル名とEditText入力は両方ともクラスメンバー変数です。

// Get filename from user 
    AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
    dialog.setTitle("Enter filename"); 

    // EditText to get user input 
    this.input = new EditText(this); 
    dialog.setView(input); 

    dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      filename = input.getText().toString(); 
     } 
    }); 

    dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      // cancelled 
     } 
    }); 
    dialog.show(); 
    Log.d(LOG_TAG, "Filename is : " + filename); 

私はandroid prompt user's input using a dialogに基づいていますが、私の問題は異なります。

答えて

0

実際にデータを入力する前に、文字列をログに記録しようとします。 ログを肯定的なonClickの中に入れようとすると、あなたはそれが保存されることがわかるでしょう。そのような

// Get filename from user 
AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
dialog.setTitle("Enter filename"); 

// EditText to get user input 
this.input = new EditText(this); 
dialog.setView(input); 

dialog.setPositiveButton("Ok", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     filename = input.getText().toString(); 
     Log.d(LOG_TAG, "Filename is : " + filename); 
    } 
}); 

dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int whichButton) { 
     // cancelled 
    } 
}); 
dialog.show(); 
+0

これは動作します(私は、入力されたかを示して)が、なぜそれがメンバ変数に保存されませんか?私はこのキーワードをonClick内のfilenameから呼び出すことはできませんが、その名前の変数はありません。 – Drok

+0

保存しますが、dialog.show()を呼び出した場所と同じ関数では使用できません。ユーザがダイアログ内のOKをクリックする前に実行されるためです。ファイル名を使用するために必要なことは、すべてのコードをonClick関数内に置くか、onClickから別の関数を呼び出すことです。 (または、私が正しく理解していない場合は詳細を教えてください)。 –

+0

これは機能します。コードの残りの部分をプライベートメソッドに入れ、ファイル名を渡します。 2回目のダイアログボックスを呼び出した後に2番目のログステートメント(メンバー変数を使用)を実行すると、何かがブロックされているのがわかります。なぜ私はそれを動かす必要があるのか​​の論理を完全に理解していません。私は、新しいメソッドは、親クラスまたはアクティビティではなく、DialogInterface.OnClickListener()インターフェイスの内部ではなく、私は最初のやり方が理にかなったと思ったコードを実行すると思います。 – Drok

関連する問題