2010-12-09 3 views
3

나는 이것이 쉬울 것이라고 생각했지만 나를 풀어 주었다. 사용자가 일부 텍스트를 입력 한 다음 확인 및 취소 단추가 정의되어있는 사용자 지정 대화 상자를 표시하는 활동이 있습니다. show()를 사용하여 표시합니다. 하지만 대화 상자에서 값을 다시 얻는 방법을 알 수는 없습니다.Android - 대화 상자에서 Activity가 사용자가 입력 한 텍스트를 얻는 방법

텍스트 입력의 유효성을 검사하기 때문에 사용자 지정 대화 상자를 사용하고 있습니다. 나는 액티비티에서 파생되도록 startActivityForResult를 사용하여 그것을 바꿀 수 있다고 생각한다. 적어도 나의 오래된 윈도우 프로그래밍 일에 기반한다. 안드로이드 대화 상자에서 사용자가 입력 한 값을 되 찾는 것이 쉽다.

일부 콜백 또는 리스너 메커니즘을 간과하고 있습니까?

나는 단순한 해결책으로 이것을 시도해 보았지만, 수식어가 final로 설정되어 있지 않으면 값 (1)에 할당하지 않고 (2) 최종으로 만들기 위해 ok라고 말하면, 할당하지 못하게한다.

String value; 

    final EditText input = (EditText)findViewById(R.id.theText); 

    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setView(input); 
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() 
    { 
     public void onClick(DialogInterface dialog, int whichButton) 
     { 
      value = input.getText().toString(); 
      dialog.dismiss(); 
     } 
    }); 
    builder.show(); 

[EDIT 용액 업데이트] 그것에 ============ "가 둘러싸 타입 정의되므로 최종 로컬 변수 값을 할당 할 수 없다"때문에

내가 한 일은 대화 상자에 처리기를 전달하는 기능을 추가하는 것이 었습니다. 대화 상자 클래스에 내가 추가 :

private Handler clientHandler = null; 

    public void AddHandler(Handler client) 
    { 
     this.clientHandler = client; 
    } 

하고 대화 상자의 OK 버튼을 클릭 업데이트 : 대화 상자를 표시하는 활동의에서 onCreate()에서 다음

/** 
    * The user pressed the OK button 
    * @param v 
    */ 
    public void okClick(View v) 
    { 
     // save the entered string 
     this.tag = this.tagEditText.getText().toString(); 

     if (null != this.clientHandler) 
     { 
     // Notify the client to update itself 
     this.clientHandler.sendMessage(clientHandler.obtainMessage()); 
     } 

     cancel(); 
    } 

을 나는 추가 :

tagDialog = new tagDialog(this); 

tagHandler = new Handler() 
{ 
    @Override 
    public void handleMessage(Message msg) 
    { 
     tag = tagDialog.tag;    
    } 
}; 

tagDialog.AddHandler(tagHandler); 

답변

1

Message를 Handler에 보내고 싶습니다. getMessage()를 사용하여 Message 객체를 가져온 다음 Message Queue를 통해 Handler에 메시지를 보냅니다.

+0

이것들은 모두 훌륭한 제안 이었지만,이 문제는 내 문제를 해결하기 위해 올바른 길로 내려갔습니다. 대화 상자에서 데이터를 얻는 것이 쉽지 않은 것으로 밝혀졌습니다. 최종 솔루션에서 코드를 게시합니다. 모두에게 감사드립니다. – bursk

2

저장하고자하는 내용을 DialogonClickListener에 저장하십시오. dialog.findViewById()을 사용하여 텍스트 상자를 찾고 텍스트를 어딘가에 저장하거나 Handler를 사용하고 Activity에서 저장된 텍스트를 검색하십시오.

2

여기서 뭔가를 놓치지 않는다면 정적 문자열이되지 않을까요?

+0

그래, 내 경우에 그랬어. 그러나 변수는 클래스 최상위에 선언되어야합니다. 어쨌든 할당을 위해 지역 변수를 사용할 수 있습니까? –

관련 문제