Почему onActivityResult () не выполняется? - PullRequest
2 голосов
/ 25 июня 2011

Я опытный Java-программист, делающий свои первые шаги в разработке Android. Моя проблема проста, мой onActivityResult() не выполняется в основной деятельности. Вот что я сделал.

В методе MainActivity onCreate,

Intent intent = new Intent(MainActivity.this, NewScreen.class);

startActivityForResult(intent,RESULT_OK);

И я переопределил метод onActivityResult в MainActivity:

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

    Log.d("Debug", "Received");
}

В NewScreen Активность:

Intent intent = new Intent(NewScreen.this, MainActivity.class);

this.setResult(RESULT_OK,intent);

Log.d("Debug", "Setting the Result");

finish();

Файл моего манифеста:

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:name=".MainActivity"
              android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="NewScreen"></activity>

</application>

Ответы [ 3 ]

5 голосов
/ 26 июня 2011

Вы использовали RESULT_OK в качестве кода запроса. Значение RESULT_OK является отрицательным (на самом деле -1). Вот почему вы не получили результат от NewScreen активности. Если вы посмотрите документацию для requestCode аргумента , он скажет:

requestCode Если> = 0, этот код будет возвращен в onActivityResult () при выходе из операции.

Итак, вы должны определить свой неотрицательный код запроса и использовать его для startActivityForResult. Вот пример:

public class MainActivity extends Activity
{

    static final int REQUEST_CODE = 13;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
         //...             

         Intent intent = new Intent(MainActivity.this, NewScreen.class);
         startActivityForResult(intent, REQUEST_CODE);
    }
}
4 голосов
/ 25 июня 2011

В действии NewScreen попробуйте использовать конструктор по умолчанию (без параметров) для Intent ...

Intent intent = new Intent();

setResult(RESULT_OK,intent);

Log.d("Debug", "Setting the Result");

finish();

EDIT: Также 'код запроса', который вы отправляете наактивность может быть лучше, чем какое-то значение, отличное от RESULT_OK, например ..

startActivityForResult(intent, 1234);
1 голос
/ 25 июня 2011

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

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