Возврат к 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);
    }
}

0 ответов

Другие вопросы по тегам