2011-06-14 4 views
0

나는 2 개의 텍스트 필드가 있고 그 다음에 포지티브 및 네거티브 버튼이 있다는 경고 대화 상자가 있습니다.Show ... 호출 할 때까지 AlertDialog에서 단추를 찾을 수 없습니다. 왜? CREATE 후에 사용할 수 없습니까?

최종 텍스트 필드에서 nextFocusDown을 항상 긍정적 인 버튼으로 설정하려고했습니다.

양수 및 음수 버튼이 두 번째 텍스트 필드 아래에 서로 나란히 배치되어 있으며 사용자 입력 용 커서가 왼쪽 버튼 위에 있으면 nextfocus가 왼쪽 버튼으로 이동하고 오른쪽 버튼 위에 있으면 오른쪽 버튼으로 이동하십시오.

그래서 나는 나의 경고 대화 상자를 만들려면 내 경고 빌더를 사용하여 다음

myAlertDialog.getButton (DialogInterface.BUTTON_POSITIVE)를 호출하려고 시도; 그런 다음 ExitText 필드 nextFocusDownId를 해당 단추의 ID로 설정하십시오.

이 경고를 사용자에게 표시하기 전에이 작업을 수행하면 모든 경주 조건이 발생할 가능성이 거의 없습니다.

아아, ad.getButton은 매 회 NULL을 반환합니다. ad.show() 호출 후에 이러한 코드 행을 이동하면 모든 것이 완벽하게 작동합니다.

그래서 내가 가진 질문은 누군가가 내게 이것을 설명 할 수있을 것 같아요. 일단 내가 긍정적 인 단추를 설정하고보기가 있어야하지만 보이지 않아야한다는 AlertDialog를 만들었다면 ... 생각하지 않을 것입니다. 분명히 그렇지 않습니다. DisplayWidget은보기가 실제로 표시 될 때까지 생성되지 않습니다. 엄지 손가락의 일반적인 규칙? 뷰가 비정상적으로 확대 될 때 뷰를 표시하기 전에 뷰를 볼 수 있습니다. 그렇다면 이것에 관한 일반적인 경험 법칙은 무엇입니까?

+0

Android에 있습니다. 죄송합니다. – user756212

답변

0

마지막 진술/질문이 올바른 방향이라고 생각합니다. 대화 상자의 show() 호출은 팽창되어보기를 표시합니다. 따라서 대화 상자가 표시 될 때까지 코드에서보기와 상호 작용할 수 없습니다. 대화 상자를 조작하는 코드가 show()을 호출 한 직후라면 경쟁 조건이 많이 있다는 것을 알 수 없습니다. - 대화를 시작하고 화면에 표시

show() :

은 특히, 여기에 javadoc에 말하는 것입니다.

따라서 대화 상자는 show()이 호출 될 때까지 "시작된"것이 아닙니다.

0

다음은 대화 상자를 채우는 코드 예제입니다. 비슷한 방법을 사용하고 다음 버튼을 설정해야 할 수 있음 :

LayoutInflater li = LayoutInflater.from(ctx); 
View view = li.inflate(R.layout.promptdialog, null); 
//get a builder and set the view 
AlertDialog.Builder builder = new AlertDialog.Builder(ctx); 
builder.setTitle("Prompt"); 
builder.setView(view); 
0

이들은 AlertDialog.Builder 사용의 제한이 있습니다. 제안했듯이, 귀하의 견해는 아직 팽창되어 있지 않습니다. 대화 상자가 표시 될 때까지 이러한보기에 액세스 할 수있는 방법이 없다는 것을 의미하지는 않습니다. 직접 뷰를 팽창시키고 마음대로 수정할 수 있습니다. docs on custom dialogs을 참조하십시오. 자신의 견해를 팽창시키고 DialogView을 설정하려면 setView을 사용하십시오. 불행하게도 이것은 Builder이 제공하는 많은 단순함을 무효화합니다.

관련 문제