2013-12-22 7 views
0

AlertDialog에서 '데이터베이스에서 삭제'버튼을 클릭하도록 확인하려고합니다. 꽤 오랜 시간 동안 노력 중이며 작업 모델을 얻을 수 없습니다. 현재 코드는 다음과 같습니다.Android에서 AlertDialog를 사용하여 삭제 확인

클래스의 상단 부울

private static boolean dialogResult; 

방법은 다이얼로그

setDialogResult (BOOL)는 단지 상기 클래스 변수를 설정
private void showErrorDialog(String title, String message){ 
    AlertDialog.Builder builder = new AlertDialog.Builder(this) 
    .setTitle(title) 
     .setMessage(message) 
     .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Activity.setDialogResult(true); 
       dialog.dismiss(); 
       } 
      }) 
     .setNegativeButton(R.string.cancel,new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Activity.setDialogResult(false); 
       dialog.dismiss(); 
       } 
      }); 
    AlertDialog alert = builder.create(); 
    alert.show(); 
} 

를 표시한다. '삭제'버튼이 코드를 누르면

은 실행 :

setDialogResult(false); 
//Find which list is to be deleted 
     RadioButton selectedBtn=(RadioButton)findViewById(group.getCheckedRadioButtonId()); 
     String currentSelectedListName=selectedBtn.getText().toString(); 

      if(!currentSelectedListName.equals("All")){//check if the list is the default 
       showErrorDialog("","Delete: "+currentSelectedListName+" ?"); 
       if(dialogResult){ 
        mDbHelper.deleteFGList(currentSelectedListName); 
        this.populateRadioGroupFromDb(); 
       } 
      } else{//if it is the default (That is, the name of the list is "All") tell user of error 
       showErrorDialog("Delete Error","The default list cannot be deleted"); 
      } 
     //} 

이 도움을 주셔서 감사합니다!

편집 : 죄송합니다. 오류가 있음을 잊어 버렸습니다. 경고 대화 상자에서 확인을 누르면 데이터베이스에서 항목이 삭제되지 않습니다. 어떻게 든 그것은 부울 검사를 건너 뜁니다. 해당 코드 단편의 시작 부분에서 부울 값을 false로 설정할 수 있습니다. 삭제되면 대화 상자의 '삭제'버튼, 확인 버튼을 누르면 아무 일도 일어나지 않습니다. '삭제'버튼을 다시 누르면이 새로운 선택 항목이 대화 상자 검사없이 자동으로 삭제됩니다. 기본적으로, 그 onClick 메서드는 엉망이고, 나는 그것을 할 수있는 더 좋은 방법이 있기를 바랐다. 인터페이스 사용에 대해 읽은 적이 있습니까?

은 그래서 사람들이

if(!currentSelectedListName.equals("All")){//check if the list is the default 
       AlertDialog.Builder builder = new AlertDialog.Builder(this) 
       .setTitle("") 
        .setMessage("Delete: "+currentSelectedListName+" ?") 
        .setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
           mDbHelper.deleteFGList(currentSelectedListName); 
           Activity.populateRadioGroupFromDb(); 
          } 
        }) 
        .setNegativeButton(R.string.cancel,null); 
       AlertDialog alert = builder.create(); 
       alert.show(); 
      } else{//if it is the default (That is, the name of the list is "All") tell user of error 
       showErrorDialog("Delete Error","The default list cannot be deleted"); 
      } 

문제가 일식

mDbHelper.deleteFGList(currentSelectedListName); 
Activity.populateRadioGroupFromDb(); 

이 내부 클래스 내부가 아닌 최종 변수 currentSelectedListName를 참조 1.Cannot에 컴파일 오류를 준다이다이 방법을 제시 한 것 다른 메서드에서 정의 됨 2. MyFGCardsActivity 형식의 non-static 메서드 populateRadioGroupFromDb()에 대한 정적 참조를 만들지 못함

이것이 옹호 된 접근입니까, 아니면 오해입니까?

+0

무엇이 오류입니까? –

+0

어떤 문제가 있습니까? 대화 상자가 표시됩니까? – Chandrashekhar

답변

0

전화

+0

아쉽게도 setPositiveButton의 OnClick 메서드는 다른 클래스에있는 것으로 간주되므로 currentSelectedListName은 전달되지 않고 ActivityClass.populateRadioGroupFromDb(); 정적, 비 정적 문제로 인해 작동하지 않았습니다. 이 중 하나를 이미 시도했습니다 – ReluctantTurtle

1

안드로이드 대화 상자 디자인으로 모달되지 않습니다 setPositiveButton에서이 두 라인

mDbHelper.deleteFGList(currentSelectedListName); 
this.populateRadioGroupFromDb(); 

감사합니다. 즉, 해지 될 때까지 코드 실행을 차단하지 않지만 show()은 즉시 반환됩니다. 따라서 다음과 같은 코드를 작성할 때 :

showErrorDialog("","Delete: "+currentSelectedListName+" ?"); 
if(dialogResult){ 

dialogResult은 아직 사용할 수 없습니다.

이제 "인터페이스"에 대해 언급하고 있으며 이는 솔루션의 일부입니다. 예를 들어 콜백을 지정해야합니다. 당신이 원하는 것을하는 긍정적이고 부정적인 버튼. 이러한 콜백은 Java 인터페이스와 관련하여 구현됩니다. 실제로 이미 이미 콜백 인터페이스가 이미 있습니다 (DialogInterface.OnClickListener).

리버스에서 긍정적 인 클릭으로 실행되어야하는 코드는 모두 양수 버튼에 넣으십시오.삭제 코드를 입력하고 해당 리스너에서 제외 클릭에서 실행해야하는 코드를 입력하십시오. 아무것도. dialogResult 변수 및 해당 코딩 스타일을 승격시키는 자습서 (지역 상태 정보에 정적 클래스 변수 사용)를 제거하십시오.

여기서 청취자의 onClick()에있는 dismiss()을 호출하는 것은 중복됩니다. 이처럼 청취자를 할당하면 청취자가 실행될 때 대화 상자가 이미 해제됩니다.

+0

dialogResult 메소드가 좋지 않은 접근 방식이라는 것에 동의합니다. 원래 게시물을 편집합니다. 그게 무슨 뜻입니까? 사용할 수있는 인터페이스를 만드는 데 많은 경험이 없으므로 이제 어떻게해야할까요? – ReluctantTurtle