@Override protected void showDialog(Bundle state) { if (getEntries() == null || getEntryValues() == null) { throw new IllegalStateException( "ListPreference requires an entries array and an entryValues array."); } int preselect = findIndexOfValue(getValue()); AlertDialog.Builder builder = new AlertDialog.Builder(getContext()) .setTitle(getDialogTitle()) .setIcon(getDialogIcon()) .setSingleChoiceItems( getEntries(), preselect, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (which >= 0 && getEntryValues() != null) { String value = getEntryValues()[which].toString(); if (callChangeListener(value) && isPersistent()) setValue(value); } dialog.dismiss(); } }); PreferenceManager pm = getPreferenceManager(); try { Method method = pm.getClass() .getDeclaredMethod( "registerOnActivityDestroyListener", PreferenceManager.OnActivityDestroyListener.class); method.setAccessible(true); method.invoke(pm, this); } catch (Exception e) { e.printStackTrace(); } mDialog = builder.create(); if (state != null) mDialog.onRestoreInstanceState(state); mDialog.show(); }
@SuppressWarnings("ConstantConditions") public void searchRadiusDialog() { scanValue = Integer.valueOf(preferences.getString(SettingsUtil.SCAN_VALUE, "4")); final AppCompatDialog dialog = new AppCompatDialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.dialog_search_radius); final SeekBar seekBar = (SeekBar) dialog.findViewById(R.id.seekBar); Button btnSave = (Button) dialog.findViewById(R.id.btnAccept); Button btnCancel = (Button) dialog.findViewById(R.id.btnCancel); final TextView tvNumber = (TextView) dialog.findViewById(R.id.tvNumber); final TextView tvEstimate = (TextView) dialog.findViewById(R.id.tvEstimate); tvNumber.setText(String.valueOf(scanValue)); tvEstimate.setText( getString(R.string.timeEstimate) + " " + UiUtils.getSearchTime(scanValue, this)); seekBar.setProgress(scanValue); seekBar.setMax(12); seekBar.setOnSeekBarChangeListener( new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { tvNumber.setText(String.valueOf(i)); tvEstimate.setText( getString(R.string.timeEstimate) + " " + UiUtils.getSearchTime(i, SettingsActivity.this)); } @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) {} }); btnSave.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { int saveValue = seekBar.getProgress(); if (saveValue == 0) { scanValue = 1; } else { scanValue = saveValue; } SharedPreferences.Editor editor = preferences.edit(); editor.putString(SettingsUtil.SCAN_VALUE, String.valueOf(scanValue)); editor.apply(); dialog.dismiss(); } }); btnCancel.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { dialog.dismiss(); } }); dialog.show(); }
@Override public void onActivityDestroy() { super.onActivityDestroy(); if (mDialog != null && mDialog.isShowing()) mDialog.dismiss(); }