Возврат к Activity заставил метод обратного вызова не работать
От MainActivity
Я звоню ConversionActivity
и все работает отлично. buttonConvert
(версия 1) вызывает обратный вызов AlertDialog и positiveButton confirmConversation
и все работает отлично.
Но если я вернусь к MainActivity
и позвонить ConversionActivity
снова AlertDialog
а также positiveButton
не звонит confirmConversation
и я не могу этого понять вообще. Это проблема, может быть, с моим AlerDialog
учебный класс?
ps при отладке точек останова, которые были отмечены в обратном вызове confirmConversation
метод, в котором показывается "Suspended: Thread"
Ofcourse (версия 2) код, который создает AlertDialog
без отдельного класса и обратных вызовов работает нормально. Но я хочу поместить код в отдельные классы настолько, насколько смогу.
ConversionActivity:
public class ConversionActivity extends AppCompatActivity implements ConfirmConversationAlertDialog.onConfirmConversation {
SimpleCursorAdapter cursorAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_conversion);
currencySpinner1 = (Spinner) findViewById(R.id.currenciesSpinner1);
currencySpinner2 = (Spinner) findViewById(R.id.currenciesSpinner2);
editTextFrom = (EditText) findViewById(R.id.editTextFrom);
editTextTo = (EditText) findViewById(R.id.editTextTo);
buttonConvert = (Button) findViewById(R.id.buttonConvert);
//Converting From
currencySpinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
....
});
//Converting To
currencySpinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
....
});
buttonConvert.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// - - - - - 1st version - - - - - -
ConfirmConversationAlertDialog.confirmationCreateDialog(ConversionActivity.this).show();
// - - - - - - - - - - - - - - - - -
// - - -2nd v. Without separate class - - -
// - - -Just example what works - - -
AlertDialog.Builder builder = new AlertDialog.Builder(ConversionActivity.this);
builder.setPositiveButton("Launch missile", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ok();
}
});
builder.setNegativeButton("Cancel", null);
// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();
// - - - - - - - - - - - - - - - - -
}
});
editTextFrom.addTextChangedListener(
new TextWatcher() {
... onTextChanged() and beforeTextChanged() methods ...
private Timer timer = new Timer();
private final long DELAY = 1000; // milliseconds
@Override
public void afterTextChanged(final Editable s) {
try {
amountFrom = Double.valueOf(s.toString().trim());
} catch (NumberFormatException e) {
amountFrom = 0.0; // your default value
}
timer.cancel();
timer = new Timer();
timer.schedule(
new TimerTask() {
@Override
public void run() {
if (!TextUtils.isEmpty(s.toString().trim())) {
if (currency2 != null && currency1 != null) {
convertPreview();
}
}
}
},
DELAY
);
}
}
);
loadSpinnerList();
}
public void loadSpinnerList() {
SQLiteDatabase database = new DBHelper(this).getReadableDatabase();
Cursor cursor = database.query(
ValiutosDBContract.Valiutos.TABLE_CURRENCIES, // The table to query
new String[]{"_id", ValiutosDBContract.Valiutos.COLUMN_CURRENCY,
ValiutosDBContract.Valiutos.COLUMN_AMOUNT}, // The columns to return
null, // The columns for the WHERE clause
null, // The values for the WHERE clause
null, // don't group the rows
null, // don't filter by row groups
null // don't sort
);
String[] adapterCols = new String[]{ValiutosDBContract.Valiutos.COLUMN_CURRENCY};
int[] adapterRowViews = new int[]{android.R.id.text1};
cursorAdapter = new SimpleCursorAdapter(
this, android.R.layout.simple_spinner_item, cursor, adapterCols, adapterRowViews, 0);
cursorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
currencySpinner1.setAdapter(cursorAdapter);
currencySpinner2.setAdapter(cursorAdapter);
}
/*
*
* CODE STOPS WORKING HERE AFTER COMMING BACK TO ACTIVITY
*
*/
@Override
public void confirmConversation(boolean submit) {
if (submit) {
try {
... Various calculations and String formations ...
SQLiteDatabase database = new DBHelper(this).getReadableDatabase();
database.update(ValiutosDBContract.Valiutos.TABLE_CURRENCIES, cvFromAmount, "currency = '" + currency1 + "'", null);
database.update(ValiutosDBContract.Valiutos.TABLE_CURRENCIES, cvToAmount, "currency = '" + currency2 + "'", null);
database.update(KomisiniaiDBContract.Komisiniai.TABLE_KOMISINIAI, cvKomisinis, "komisinis = '" + komisinis + "'", null);
loadSpinnerList();
} catch (NumberFormatException e) {
Toast.makeText(this, "Bloga convertuojamos sumos", Toast.LENGTH_SHORT).show();
}
}
}
ConfirmConversationAlertDialog:
public class ConfirmConversationAlertDialog extends DialogFragment {
private static final String MESSAGE_CONFIRM = "Continue?";
//Context context = null;
private static boolean submitData = false;
private static onConfirmConversation confirmationCallback;
//For confirming currency conversation
public static Dialog confirmationCreateDialog(final Context context) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(MESSAGE_CONFIRM)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
submitData = true;
if (confirmationCallback == null)
confirmationCallback = (onConfirmConversation) context;
confirmationCallback.confirmConversation(submitData);
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
submitData = false;
if (confirmationCallback == null)
confirmationCallback = (onConfirmConversation) context;
confirmationCallback.confirmConversation(submitData);
}
});
return builder.create();
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
if (confirmationCallback == null)
confirmationCallback = (onConfirmConversation) context;
} catch (Exception ex) {
throw new RuntimeException(context.toString()
+ " must implement OnFragmentInteractionListener");
}
}
@Override
public void onDetach() {
super.onDetach();
confirmationCallback = null;
Log.d("db", "interface detach");
}
public interface onConfirmConversation {
void confirmConversation(boolean submit);
}
}