2017-04-06 1 views
1

내 활동에 토글 버튼이 있습니다. 스위치가 켜지면 활성화 대화 상자가 표시되고 스위치가 꺼지면 대화 상자가 비활성화됩니다.취소 대화 상자의 토글 버튼 상태 복원

private void showEnableShareingDialog() { 
    final CharSequence options[]= getResources().getStringArray(R.array.sharing_options); 
    AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this); 

    builder.setTitle(getString(R.string.you_want_to_enable_prev_sigtings)); 

    builder.setItems(options, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if(which==0){ 
       mShareSigtings=true; 
       mEnableShareing=true; 
       updateSettings(); 
      } else if(which==1){ 
       mShareSigtings=true; 
       mEnableShareing=false; 
       updateSettings(); 
      } else { 
       /*---todo---*/ 
       dialog.cancel(); 
      } 
     } 
    }); 
    builder.show(); 
} 

이 비활성화 대화입니다 :

((SwitchCompat) findViewById(R.id.toggleButton)).setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if(isChecked){ 
       ((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("on"); 
       showEnableSharingDialog(); 
      } else { 
       ((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("off"); 
       showDiasableShareingDialog(); 
      } 
     } 
    }); 

활성화 대화 모두 대화 상자에서

private void showDiasableShareingDialog() { 
    final CharSequence options[]= getResources().getStringArray(R.array.remove_sharing_options); 
    AlertDialog.Builder builder = new AlertDialog.Builder(SettingsActivity.this); 

    builder.setTitle(getString(R.string.you_want_to_remove_prev_sigtings)); 

    builder.setItems(options, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      if (which == 0) { 
       mShareSigtings = false; 
       mRemovePrevSigtings = true; 
       updateSettings(); 
      } else if (which == 1) { 
       mShareSigtings = false; 
       mRemovePrevSigtings = false; 
       updateSettings(); 
      } else { 
       /*---todo---*/ 
       dialog.cancel(); 
      } 
     } 
    }); 
    builder.show(); 
} 

, 그것은 즉, 상태 버튼 스위치 토글 토글 후 ON 상태에 있었다라고 I 버튼을 누르면 대화 상자가 팝업되고, 취소를 누르면 ON 상태에서 OFF 상태로 바뀝니다. 예상 된 결과는 CANCEL이 눌려 졌을 때, 토글 버튼이 원래의 위치에 남아 있어야한다는 것입니다. 즉 토글이 ON이면 CANCEL을 ON으로 유지해야합니다. 이런 종류의 작업을 어떻게 성취 할 수 있습니까?

또한 아래와 같이하면 대화 상자가 모두 CANCEL을 계속 누르면 팝업됩니다.

if(((SwitchCompat)findViewById(R.id.toggle3)).isChecked()){ 
        ((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false); 
}else { 
        ((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true); 
} 
+0

귀하의 조건이 문제를 일으키는 :

SwitchCompat mySwich = ((SwitchCompat) findViewById(R.id.toggleButton)) OnCheckedChangeListener listener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked){ ((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("on"); showEnableSharingDialog(); } else { ((StyleableTextView) findViewById(R.id.lbl_toggle_status)).setText("off"); showDiasableShareingDialog(); } } }; mySwitch.setOnCheckedChangeListener(listener); 

그리고 당신의 취소 콜백에

, 당신은 그런 일을 할 수 있습니다. .setChecked를 통해 프로그램 방식으로 스위치를 토글하는 코드가 호출되면 트리거됩니다. –

답변

1

당신은 알고 있습니다

  • onCheckedChanged가 SwichCompat의 상태 변경 후 호출됩니다. 당신이 당신의 SwitchCompat에 OnCheckedChangeListener을 추가 한 경우
  • 이 리스너가 그래서

, 이것에 대한 빠른 수정 (코드에 의해 또는 수동으로 눌러)를 SWICH는의 상태 변경 후 트리거 될 경우 전 swich set null의 점검 상태를 onCheckedChanged로 변경 한 다음 리스너를 다시 넣으십시오. 다음은 그 예이다 : 당신이 스위치 토글을 설정할 때 setOnChangeListener에 대한

mySwitch.setOnCheckedChangeListener(null); 
if(((SwitchCompat)findViewById(R.id.toggle3)).isChecked()){ 
        ((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false); 
}else { 
        ((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true); 
} 
mySwitch.setOnCheckedChangeListener(listener); 
+0

내 문제를 해결이 같은 일을 도와 주셔서 감사합니다 – Raj

+0

좋아, 그럼 대답을 확인하십시오 :) –

0

(가) 사건에 대한 "다른 사람"에 내리는 작업을 취소 의미 위의 그 다른 코드의 각

else { 
 
    /*---todo---*/ 
 
    dialog.cancel(); 
 
}

- 당신은 추가 할 수

((SwitchCompat)findViewById(R.id.toggle3)).setChecked(false); 

또는

((SwitchCompat)findViewById(R.id.toggle3)).setChecked(true); 

/--- todo ---/덧글 바로 앞에 dialog.cancel();

+0

대화 상자 또는 둘 중 하나에 추가해야합니까? – Raj

+0

@Raj 하나 또는 둘 다 시도해보십시오. –

+0

나는 당신이 말한대로 시도했는데, 하나의 조건에 당신이 두 번 대화를 보여줍니다에 따라 조건을 실패로 밝혀졌습니다 – Raj

관련 문제