2010-03-23 3 views
41

을 클릭하면 ProgressDialog가 해제되지 않습니다. 장기 실행 작업에서 다른 작업이 수행되지 않도록하기 위해 ProgressDialog에서 생성 된 팝업 대화 상자가 표시됩니다.검색 버튼 (Android)

setCancelable(false)으로 취소 할 수 없으므로 뒤로 버튼을 사용하여 닫을 수 없지만 놀랍게도 하드웨어 검색 버튼을 누르면 대화 상자가 닫힙니다.

더 정확히 말하면, 글로벌 검색 응용 프로그램이 표시되고, 응용 프로그램으로 돌아 오면 대화 상자가 닫힙니다.

대화 상자가 닫히지 않게하는 방법을 알려주세요.

+0

검색 버튼 기능을 재정의하는 방법은 무엇입니까? @Override public boolean onSearchRequested() {true를 반환합니다. } –

+0

놀랍게도, 이것은 작동하지 않습니다 (적어도 2.3에서 테스트). false를 반환하면 작동하지 않습니다. – cottonBallPaws

답변

45

이 (통지 내가 대화 빌더에 넣어) 작동 :

.setOnKeyListener(new DialogInterface.OnKeyListener() { 

    @Override 
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) { 
      return true; // Pretend we processed it 
     } 
     return false; // Any other keys are still processed as normal 
    } 
}) 

은 아마 양극과 음극 버튼 누름을 잡기 위해도 가능, 만 이 키를 처리하면 다른 키의 경우 true를 반환합니다. 당신이 그것을 알아낼 수 있다면 궁금 할 것입니다 ...

추신 : 어딘가에 대화 상자에 더 많은 "구멍"이 있습니다. 즉, 아무 버튼도 누르지 않고 제거 할 수 있습니다. 이것은 분명히 하나였습니다. 아무도 다른 사람을 압니까?

+0

'@ Override'를 제거하고 onKey의 선언을'public boolean onKey (DialogInterface arg0, int arg1, KeyEvent arg2)'로 변경하면 컴파일러 오류가 발생합니다. 감사합니다! –

+0

@MohamedHafez가 1.5 대신 Java 1.6을 확인하기 위해 컴파일러/IDE를 변경할 수 있습니까? – parkerfath

+0

@QQQuestions getRepeatCount() == 0이 있어야하는 이유는 무엇입니까? – parkerfath

1

활동의 onCreateDialog 이벤트를 통해 대화 상자를 만들어야합니다. 대화 상자는 활동에 의해 관리되는 지점이며 활동이 재개 될 때 복원됩니다.

활동별로 관리 (저장 및 복원)되는 대화 상자를 만들기위한 콜백. showDialog(int)을 사용하면 활동이 처음이 메소드를 호출하고 이후에 중단됩니다. 이 방법으로 생성 된 모든 대화 상자는 표시 여부를 포함하여 자동으로 저장되고 복원됩니다. 액티비티에서 저장 및 복원 대화 상자를 관리하려면이 메서드를 재정의하고 showDialog (int)에 전달 된 모든 ID를 처리해야합니다. 대화 상자를 표시하기 전에 대화 상자를 준비하려면 onPrepareDialog(int, Dialog)을 무시하십시오.

사용 예제 :

public class MyClass extends Activity { 
// ........ // 
static final int DATE_DIALOG_ID = 1; 
@Override 
protected Dialog onCreateDialog(int id) { 
    switch (id) { 

    case DATE_DIALOG_ID: 
    return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, 
    mDay); 
    } 
    return null; 
} 

    public void launchSetDate() { 
    showDialog(DATE_DIALOG_ID); 
} 
} 
+0

나는 그것을 시도했다, 그리고 대화 상자는 내가 검색 버튼을 누를 때 해산되었다. – yuku

+0

그리고 응용 프로그램으로 돌아 왔을 때? – Pentium10

+0

진행 대화 상자가 더 이상 존재하지 않습니다. ( – yuku

35
setCanceledOnTouchOutside(false); 
3

mProgressDialog.setCancelable(false);