2016-04-30 5 views
0

私はDialogFragmentに設定されたこのlayoutEditTextを含むカスタムlayoutDialogFragmentを作り、EditTextからテキストを取得するには?

AlertDialog.Builder adb = new AlertDialog.Builder(getActivity()) 
     .setView(layout) 
     .setCancelable(true); 

このような方法を設定します。実際には、DialogFragmentが表示されたら、ユーザはEditTextにあなたのコメントを入力してからsendを押す必要があります。

DialogFragmentは、私はこの問題、このような方法で解決してみてくださいので、Activityを拡張していなかったので、私は、findViewById()を試みたとき、それは問題だった:

LayoutInflater inflater = getActivity().getLayoutInflater(); 
View view = inflater.inflate(R.layout.activity_note_dialog, null); 
EditText etNoteFromWeb = (EditText)view.findViewById(R.id.etNoteFromWeb); 
String response = etNoteFromWeb.getText().toString(); 

しかしetNoteFromWeb.getText().toString();毎回空行、ないnullを私に戻って与えます。..実際には空行。

私は間違っていますか?ここで

DialogFragmentの完全なコードです:

パブリッククラスMyDialogはDialogFragmentを拡張{

final String LOG_TAG = "MyDialog"; 
private static MyDialog myDialog; 
private EditText etNoteFromWeb; 

int layout; 

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    Bundle args = this.getArguments(); 
    layout = args.getInt("layout"); 
} 

public Dialog onCreateDialog(Bundle savedInstanceState) { 

    AlertDialog.Builder adb = new AlertDialog.Builder(getActivity()) 
      .setView(layout) 
      .setCancelable(true); 

    if (layout == R.layout.activity_note_dialog) { 

     LayoutInflater inflater = getActivity().getLayoutInflater(); 

     View view = inflater.inflate(layout, null); 

     LinearLayout llSent = (LinearLayout) view.findViewById(R.id.llSent); 
     LinearLayout llSkip = (LinearLayout) view.findViewById(R.id.llSkip); 

     llSent.setOnClickListener(listener); 
     llSkip.setOnClickListener(listener); 
     adb.setView(view); 
    } 

    return adb.create(); 
} 

View.OnClickListener listener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 

     if (layout == R.layout.activity_note_dialog) { 

      LayoutInflater inflater = getActivity().getLayoutInflater(); 
      View view = inflater.inflate(R.layout.activity_note_dialog, null); 
      etNoteFromWeb = (EditText) view.findViewById(R.id.etNoteFromWeb); 
      String response = etNoteFromWeb.getText().toString(); 
//    String response = "etNoteFromWeb.getText().toString()"; 
      // Здесь в System.out.println ничего нет...9((но когда раскоментирована строка 
      // выше и указываю статический текст, то все работает, проблема именно в том, 
      // что не достает текст из EditText 
      System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + response); 
      switch (v.getId()) { 
       case R.id.llSent: 
        onClick.onDialogClickListener(response); 
        myDialog.dismiss(); 
        break; 
       case R.id.llSkip: 
        onClick.onDialogClickListener(null); 
        myDialog.dismiss(); 
        break; 
      } 
     } 
    } 
}; 

public void dismissDialog(final MyDialog dialog, int daleyTime) { 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      try { 
       dialog.dismiss(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } 
     } 
    }, daleyTime); 
} 

public void onDismiss(DialogInterface dialog) { 
    super.onDismiss(dialog); 
    Log.d(LOG_TAG, "MyDialog: onDismiss"); 
} 

public void onCancel(DialogInterface dialog) { 
    super.onCancel(dialog); 
    Log.d(LOG_TAG, "MyDialog: onCancel"); 
} 

public static MyDialog newInstance(int layout) { 
    myDialog = new MyDialog(); 

    Bundle args = new Bundle(); 
    args.putInt("layout", layout); 
    myDialog.setArguments(args); 

    return myDialog; 
} 


// Этот интерфейс я реализовал для того чтоб можно было передавать данные из DialogFragment 
public interface OnButtonClick { 
    void onDialogClickListener(String response); 
} 

OnButtonClick onClick; 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 

    try { 
     onClick = (OnButtonClick) activity; 
    } catch (ClassCastException e) { 
     throw new ClassCastException(activity.toString() + " must implement onDialogClickListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    onClick = null; 
} 
} 
+0

System.out.prinlnを使用しないでください。代わりにLog.d(TAG、 "Unique identifier")を使用してください。 –

+0

@prathamkesarkar私はルーキーです。私は 'Log'で何度か作業してみましたが、毎回期待していなかったことに気付きました...もう一度試してみます –

答えて

2

これは、あなたがあなたのためにレイアウトがonClickで再膨張するので、テキストは常に空です。 あなたはそれを動作させるためにonCreateDialogの内側にライン

etNoteFromWeb = (EditText) view.findViewById(R.id.etNoteFromWeb); 

を移動する必要があります。

0

新しいビューを作成し、そこから文字列を取得します!そのないダイアログのビュー 使用:

EditText etNoteFromWeb = (EditText)dialog.findViewById(R.id.etNoteFromWeb); 
+0

私は、ダイアログ?私のコードによれば、インスタンスの 'dialog'は存在しないからです... –

+0

あなたはオブジェクトを定義し、onCreateDialogに値を設定する前に、adb.create()をretuenしてdialog = adb.create();リターンダイアログ。 –

+0

私は理由を知らないが、それは私にとってはうまくいかない(( –

関連する問題