3

AlertDialog의 EditText 필드에 입력을 허용하고 싶습니다. 이것 자체는 꽤 간단합니다. 그러나이 요청으로 인해 내가 좋아할 몇 가지 "명백한"기능이 있습니다. 나는 그들을 하나씩 가져갈 것이다. 나는 이런 것들에 대한 간단한 해결책을 가진 사람을 찾고있다. 나는 해결책을 추측하고있다. "당신 자신의 커스텀 대화 상자를 게으른 부랑자를 써라." EditTextEditText가있는 AlertDialog의 더 나은 솔루션

final EditText input = new EditText(context); 
final AlertDialog dlg = new AlertDialog.Builder(this). 
    setTitle("Title"). 
    setView(input). 
    setCancelable(false). 
    setPositiveButton(android.R.string.ok, new OnClickListener() 
    { 
     @Override 
     public void onClick(final DialogInterface dialog, final int which) 
     { 
      /* Handle ok clicked */ 
      dialog.dismiss(); 
     } 
    }). 
    setNegativeButton(android.R.string.cancel, new OnClickListener() 
    { 
     @Override 
     public void onClick(final DialogInterface dialog, final int which) 
     { 
      /* Handle cancel clicked */ 
      dialog.dismiss(); 
     } 
    }).create(); 
dlg.show(); 

야호와

AlertDialog는 잘 작동합니다. 그 입력 필드가 바로 초점을 맞추면 (그리고 키보드를 보여 주면) 좋을 것입니다. 맞습니까? 집중 EditText

AlertDialog 다음 코드는 create() 후가 될 것입니다 및 dlg.show()

/** This requires API Level 8 or greater. */ 
dlg.setOnShowListener(new OnShowListener() 
{ 
    @Override 
    public void onShow(final DialogInterface dialog) 
    { 
     input.requestFocus(); 
     ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(input, 0); 
    } 
}); 

니스 작업하기 전에 ... 그런 것 같아요. 가 입력 IME 옵션을 존중한다면 지금이 입력 초점을 맞춘 것으로이와

AlertDialog ... 좋은 것 즉 정말 대단한 아니라 이제 사용자 정의 IME 옵션

input.setImeOptions(EditorInfo.IME_ACTION_DONE); 
input.setOnEditorActionListener(new OnEditorActionListener() 
{ 
    @Override 
    public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) 
    { 
     /** Same code here that goes in the dialog.setPositiveButton OnClickListener */ 
     dlg.dismiss(); 
     return true; 
    } 
}); 

EditText 집중 솔루션 (반복 코드)하지만 작동 ...

사람들이이 문제를 해결하는 더 좋은 방법을 가지고 있습니까? 아니면 대화 상자에서 작은 정보를 묻는 것이 정말 드뭅니다. 우승자는 내 대화를 써야합니까?

+0

모든 반복 코드를'setUpImeDialog (AlertDialog dlg, EditText input) {...}'와 같은 메소드로 옮기지 않는 이유는 무엇입니까? – Eric

+0

@ Eric 분명히 그렇습니다. 아직 완성 된 IME 이벤트와 클릭 확인 요청을 수신 대기해야한다는 점이 이상적입니다. – xbakesx

+0

예, IME 이벤트로 클릭을 트리거 할 수 있습니다. 이렇게 :'dlg.getButton (DialogInterface.BUTTON_POSITIVE) .performClick();'. 여전히 2 차 행사이지만 반복되는 코드는 피할 수 있습니다. (이것이 원하는 것이라면 대답으로 추가 할 수 있습니다.) – Eric

답변

5

는 :

당신은 OnEditorActionListener 이러한 반복 코드를 할 필요가 없습니다. 코드를 반복하는 대신 OS가 활성화되었을 때 "확인"버튼을 클릭하도록 OS에 지시 할 수 있습니다. 이 같은

뭔가 :

public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) { 
    dlg.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); // Click OK button 
    return true; 
} 

전반적으로 나는 당신이 올바른 접근 방식 (documentation about collecting information through dialogs)를 복용하고 말할 것입니다. 덧글에서 언급했듯이 OS는 사전 단어를 (사용자 사전에) 추가하기 위해 AlertDialog/EditText을 사용하므로 OS에서 예상되는 기능입니다.

2

당신은 항상 Theme.Dialog 테마가있는 Activity 또는 위젯을 조정하는 당신에게 더 많은 자유를 제공하는 DialogFragment로 전환 할 수 있습니다. AlertDialogs은 아마도 정보를 표시하는 데 더 좋습니다. 희망이 도움이됩니다. 영업에 대한 의견으로 당

+0

사실 나는 동의하지 않을 것이다. [문서] (http://developer.android.com/guide/topics/ui/dialogs.html)에는 정보를 표시하는 대신 정보를 수집하는 방법이 나와 있습니다. 또한 OS에 구워진 예 : 사전 단어 추가. – Eric

+0

@ Egor 나는 누군가가 가서 새로운 활동을 만들기 전에 자신의 레이아웃으로 대화 상자를 만들고 그 방식대로하고 싶은 생각을해야한다고 생각합니다. – xbakesx