Android onActivityResult всегда равен 0 - PullRequest
17 голосов
/ 22 декабря 2010

Это убивает меня уже два дня.У меня есть основное упражнение 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 выполняет свою работу, и пакет действительно содержит данные, которые я передаю, но в какой-то момент он потерян.

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

Ответы [ 3 ]

15 голосов
/ 22 декабря 2010

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

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

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

5 голосов
/ 22 декабря 2010

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

Вы делаете:

Bundle b = getIntent().getExtras();

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

protected void onActivityResult(int requestCode, int resultCode, Intent data)
0 голосов
/ 06 декабря 2012

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

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

...