Подтвердить что ты не робот

Android onActivityResult всегда 0

Это убивает меня уже два дня. У меня есть основное упражнение A, которое вызывает второе занятие B. Упражнение B просто предоставляет пользователю представление списка. Когда я нажимаю элемент в представлении списка, я хочу, чтобы пара строк была передана обратно в основное задание A, и Activiy B. завершится.

Проблема в том, что я всегда получаю код результата 0, а пакет данных равен нулю. Я действительно не понимаю, почему это происходит.

Вот мой код

Начните упражнение B для результата:

Test.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(recipeActivity.this, BrowseLoadRecipes.class);
            startActivityForResult(i, RECIPE_CHOOSER);
    }  
    });

Это начинает вторую активность нормально. Упражнение B заполняет представление списка, и когда я щелкаю элемент, я пытаюсь отправить некоторые данные обратно вызывающему занятию A.

Любой текст на данный момент, поэтому я использовал следующее в упражнении B:

     lv.setOnItemClickListener(new OnItemClickListener() {
     @Override
     public void onItemClick(AdapterView<?> a, View v, int position, long id) {
        Bundle bundle = new Bundle();
        bundle.putString("TEXT", "Please work... pleeeeaasee");
        Intent mIntent = new Intent();
        mIntent.putExtras(bundle);
        setResult(RESULT_OK, mIntent);
        finish();
     }
     });

В вызове я прослушиваю возвращение следующим образом:

protected void onActivityResult(int requestCode, int resultCode, 
        Intent data) { 
            switch(requestCode) { 
            //TODO
            case RECIPE_CHOOSER:
                Toast.makeText(getApplicationContext(), "In recipe return", Toast.LENGTH_SHORT).show();
                Toast.makeText(getApplicationContext(), "resultCode is " + String.valueOf(resultCode), Toast.LENGTH_SHORT).show();
                if (resultCode == RESULT_OK) {
                Bundle b = getIntent().getExtras();

                Toast.makeText(getApplicationContext(), "Returned " + b.getString("TEXT"), Toast.LENGTH_LONG).show();
                }
                if (resultCode == RESULT_CANCELED) {

                    }
                break;

                } 
            } 
        }

Я вижу, что код запроса возвращен правильно, но код результата всегда равен 0, а данные всегда равны нулю.

Я выполнил отладку, и setResult выполняет свою работу, и пакет действительно содержит данные, которые я передаю, но в какой-то момент он потерян.

Есть ли что-то в манифесте, по которому я скучаю или что-то еще. Это убило мой прогресс в этом проекте до сих пор.

4b9b3361

Ответ 1

В вашей активности списка onItemClickListener попробуйте заменить строки setResult следующим образом:

if (getParent() == null) {
    setResult(Activity.RESULT_OK, data);
}
else {
    getParent().setResult(Activity.RESULT_OK, data);
}

Мне интересно, есть ли родительская активность, для чего вам нужно привязать данные и установить результат....

Ответ 2

Относительно ваших возвращенных данных.

Вы делаете:

Bundle b = getIntent().getExtras();

но "getIntent()" возвращает намерение, которое запустило ЭТУ деятельность. Если вы хотите, чтобы возвращаемые данные из Activity вы начали для результата, просто возьмите данные, которые передаются на

protected void onActivityResult(int requestCode, int resultCode, Intent data)

Ответ 3

Ваш код отлично работает........

in u Activity B
use
  setResult(0, mIntent);insted of setResult(RESULT_OK, mIntent);
in your Activity A:
use
case 0: insted case RECIPE_CHOOSER: and 
use System.out.println(b.getString("TEXT"));

Вы получите результат как

Пожалуйста, работайте... pleeeeaasee