startActivityForResult не вызывает запуск onActivityResult при использовании Parcelable объектов в Intent

С простыми типами данных все работало, но когда пришлось переписать под передачу Parcelable объектов через Intent, onActivityResult перестал вызываться

вызов второго Activity в первом

@Override
        public void onItemClick(int position, View v) {
            Log.d(TAG, "onItemClick position: " + position);
            Intent intent = new Intent(v.getContext(), ProductDetailActivity.class);
            intent.putExtra(ID_KEY, position);
            intent.putExtra(PRODUCTNAME,mProducts.get(position));
            startActivityForResult(intent, REQUEST_EDIT_TYPE);
        }

Открывается второй Activity, где Parcelable объект успешно обрабатывается и при нажатии ОК второе Activity завершает работу

public void onOKClick (View view) {
    Log.d(TAG, "OK click");
    String mProductName = productName.getText().toString();
    double mProductEnergy = Double.parseDouble(productEnergy.getText().toString());
    double mProductProtein = Double.parseDouble(productProtein.getText().toString());
    double mProductFat = Double.parseDouble(productFat.getText().toString());
    double mProductCarbohydrate = Double.parseDouble(productCarbohydrate.getText().toString());
    Product mProduct = new Product(mProductName,mProductEnergy,mProductProtein,mProductFat,mProductCarbohydrate);
    Intent data = new Intent();
    data.putExtra(ProductsFragment.ID_KEY,position);
    data.putExtra(ProductsFragment.PRODUCTNAME,mProduct);
    setResult(RESULT_OK,data);
    finish();
}

При нажатии Cancel тоже

public void onCancelClick (View view){
    Log.d(TAG, "Cancel click");
    setResult(RESULT_CANCELED);
    finish();
}

Ну и собственно onActivityResult первого

public void onActivityResult (int requestCode, int resultCode, Intent data) {
    Log.d(TAG,"OnActivityResult");
    if (requestCode==REQUEST_EDIT_TYPE) {
        Log.d(TAG, "Request edit");
        if(resultCode==RESULT_OK){
            Log.d(TAG, "Result OK");
            int position = data.getIntExtra(ID_KEY,0);
            Product mProduct = (Product) data.getParcelableExtra(PRODUCTNAME);
            mProducts.add(mProduct);
        }
        else{
            Log.d(TAG, "Edit canceled");
        }
    } else {
        Log.d(TAG, "Result super");
        super.onActivityResult(requestCode, resultCode, data);
    }
    Log.d(TAG, "Notify data changed");
    adapter.notifyDataSetChanged();
}

Что при нажатии OK, что при нажатии Cancel onActivityResult не выполняется, что видно как по сообщениям в дебаге, так и по поведению приложения.

Пробовал назначать свои переменные RESULT_OK и RESULT_CANCELED, так как в Activity и во Fragment они разные. Находил информацию, что нужно только положительные их значения - не правда. Что самое странное Parcelable объект Product прекрасно передается с помощью Intent так как второе Activity его правильно распаковывает и обрабатывает, а onActivityResult даже с пустым Intent не хочет выполняться


Ответы (1 шт):

Автор решения: ЮрийСПб

Вы явно указали не вызывать onActivityResult во фрагментах, которые содержатся в MainActivity, не вызвав super.onActivityResult() в MainActivity.

Вызовите super.onActivityResult() в MainActivity или просто удалите этот метод, раз в нём нет кода.

→ Ссылка