2017-02-15 5 views
-3

내 애플리케이션에서 경고 대화 상자를 사용하고 있지만 사용자가 외부에 닿으면 계속 숨어 있습니다. 여기 내 코드입니다 : 당신이 볼 수 있듯이터치가 [Android] 외부에있을 때 AlertDialog가 사라집니다.

public class DialogMessageEnd extends DialogFragment 
{ 
    String winner; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the Builder class for convenient dialog construction 
     Snooker_Scoreboard ss = new Snooker_Scoreboard(); 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setCancelable(false); 
     builder.setMessage(ss.winnerPlayer + " won the match ("+ss.frame1ToPass+"-"+ss.frame2ToPass+")!") 
       .setPositiveButton("New Match!", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         Intent i = new Intent(getContext(),PlayerSelection.class); 
         startActivity(i); 
        } 
       }); 



     // Create the AlertDialog object and return it 
     return builder.create(); 
    } 

} 

, 나는

builder.setCancelable(false); 

을 사용하지만 여전히 probem가 해결되지 않습니다. 도와 주시겠습니까? 감사

+1

당신은'Dialog.setCanceledOnTouchOutside' 방법을 살펴나요? – Selvin

+0

Selvin 당신이 적어도 읽고 이해한다면, 당신은 내가 setCanceledOnTouchOutside 메소드를 가지고 있지 않은 Alert Dialog를 사용하고 있다고 생각하지 않을 것입니다. – Pino

+0

@Pino AlertDialog는 실제로 setCanceledOnTOuchOutside를 가지고 있습니다. – tyczj

답변

1

사용 setCanceledOnTouchOutside (false)를

AlertDialog alertDialog = builder.show(); 

alertDialog.setCanceledOnTouchOutside(false); 

를 추가합니다.

setCancelable (거짓)은 뒤로 버튼을 누를 때 해제되지 않도록하기 위해 사용됩니다.

+0

AlertDialog에 setCanceledOnTouchOutside 메소드가 없다고 알려줍니다. – Pino

+0

업데이트 된 답변보기 return 문 앞에 두 줄을 참조하십시오. – Sanjeet

+0

감사합니다. 그게 완벽합니다. – Pino

1

(가) 경고 대화 상자의 외부 접촉에 해고 방지하기위한 코드

1

대화 상자의 기본 기능을 무시하고 아무 일도 일어나지 않도록 할 수 있습니다. 잘 작동해야합니다.

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    // If we've received a touch notification that the user has touched 
    // outside the app, finish the activity. 
    if (MotionEvent.ACTION_OUTSIDE == event.getAction()) { 
     //DO SOMETHING... OR NOTHING? 
     return true; 
} 

또는 더 나은 연습

는 :

builder.setCanceledOnTouchOutside(false)