Как отправить результат Intent с помощью onPause (кнопка назад) - PullRequest
1 голос
/ 03 ноября 2019

У меня есть действие, которое содержит представление Recycler и вызывается из основного действия с дополнительной строкой. Затем пользователь будет делать некоторые вещи, которые изменят строку, и я хотел бы отправить ее обратно в основное действие. Есть ли способ сделать это, просто используя кнопку «Назад» на телефоне? У меня есть намерение результата, устанавливающее результат в методе «onPause» моего второго действия, но основное действие продолжает говорить, что результат был отменен. Пожалуйста помоги!

Основной код активности:


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == 1){
            if(resultCode == RESULT_OK){
                pantryJson = data.getStringExtra("newPantryContents");
                pantry = new ArrayList<>(Arrays.asList(new Gson().fromJson(pantryJson,
                        Ingredient[].class)));
                System.out.println("onActivityResult says: " + pantryJson);
                savePantry();
            }
            if(resultCode == RESULT_CANCELED){
                System.out.println("onActivityResult says: result canceled");
                return;
            }
        }
    }

Моя вторая активность:

@Override
    protected void onDestroy() {
        super.onDestroy();

        String pantryJsonArray = new Gson().toJson(pantry);
        System.out.println("ViewPantry onDestroy says: " + pantryJsonArray);
        Intent intent = new Intent(ViewPantryActivity.this,MainActivity.class);
        intent.putExtra("newPantryContents",pantryJsonArray);
        setResult(RESULT_OK,intent);
        finish();
    }

    @Override
    protected void onPause() {
        String pantryJsonArray = new Gson().toJson(pantry);
        System.out.println("ViewPantry onPause Says" + pantryJsonArray);
        Intent resultIntent = new Intent(ViewPantryActivity.this,MainActivity.class);
        resultIntent.putExtra("newPantryContents",pantryJsonArray);
        setResult(ViewPantryActivity.RESULT_OK,resultIntent);
        super.onPause();

    }

LogCat System.Out:

2019-11-02 22:05:42.068 566-566/com.example.myapplication I/System.out: ViewPantry onPause Says[{"barcode":{"cornerPoints":[{"x":181,"y":360},{"x":193,"y":356},{"x":193,"y":479},{"x":181,"y":483}],"displayValue":"04904500","format":1024,"rawValue":"04904500","valueFormat":5},"image":{"mHeight":300,"mNativePtr":497431990208,"mWidth":300},"name":"Clicked","quantityInPantry":1},{"barcode":{"cornerPoints":[{"x":157,"y":359},{"x":229,"y":335},{"x":229,"y":461},{"x":157,"y":487}],"displayValue":"04904500","format":1024,"rawValue":"04904500","valueFormat":5},"image":{"mHeight":300,"mNativePtr":497433345344,"mWidth":300},"name":"Diet Coca-cola","quantityInPantry":3}]
2019-11-02 22:05:42.073 566-566/com.example.myapplication I/System.out: onActivityResult says: result canceled
2019-11-02 22:05:42.516 566-566/com.example.myapplication I/System.out: ViewPantry onDestroy says: [{"barcode":{"cornerPoints":[{"x":181,"y":360},{"x":193,"y":356},{"x":193,"y":479},{"x":181,"y":483}],"displayValue":"04904500","format":1024,"rawValue":"04904500","valueFormat":5},"image":{"mHeight":300,"mNativePtr":497431990208,"mWidth":300},"name":"Clicked","quantityInPantry":1},{"barcode":{"cornerPoints":[{"x":157,"y":359},{"x":229,"y":335},{"x":229,"y":461},{"x":157,"y":487}],"displayValue":"04904500","format":1024,"rawValue":"04904500","valueFormat":5},"image":{"mHeight":300,"mNativePtr":497433345344,"mWidth":300},"name":"Diet Coca-cola","quantityInPantry":3}]

1 Ответ

0 голосов
/ 03 ноября 2019

добро пожаловать к участнику кода

Сначала я должен сказать логику вашей проблемы:

Вы хотите передать что-то в действие, это только что произошло с намерением. когда вы возвращаетесь к активности с Back btn, вы вызываете onResume этого.

Решения Now:

  1. вы можете переопределить onBackedPressed с намерением, чтобы вы могли получить то, что вы хотите вonResult ...

2.Вы можете изменить местоположение своего кода с onResult на onResume.

Вы можете использовать ссылку ниже, чтобы узнать больше о lifeCycles в Android

Жизнь на велосипеде в Android

Обновите меня в комментариях

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...