Определить интерфейсы для Android Intents - PullRequest
2 голосов
/ 12 августа 2011

При использовании Android startActivityForResult у меня нет никаких гарантий относительно того, что я получу в Intent, возвращаемом onActivityResult.

Я хотел бы определить какой-то интерфейс для ограничения возможности ошибок при передаче данных от Activity к другому (например, имя переменной с ошибкой).

Есть ли способ сделать это? Например, могу ли я использовать что-то похожее на Язык определения интерфейса Android , но между Activity s?

1 Ответ

2 голосов
/ 12 августа 2011

Существует 2 сценария передачи данных между двумя действиями A, B.

  1. Деятельность A хочет передать данные по действию B (через намерение startActivity)
  2. Требуется действие Bчтобы вернуть данные по Деятельности A, когда она заканчивается, используя setResult

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

Например, если вам нужночтобы передать целое число с помощью клавиши «рейтинг» от A до B, я, вероятно, сделал бы

class A extends Activity {
    public static final String RESULT_STATUS = "RESULT_STATUS";
    // Whatever ....
    public void startB(int rating) { 
        Intent toStart = new Intent(this, B.class);
        toStart.putExtra(B.EXTRA_RATING, rating);
        startActivityForResult(toStart, 0);
    }

    public void onActivityResult(int requestCode /* 0 in our case */, int resultCode, Intent data) {
            if (resultCode == RESULT_OK ) {
                    String returnedStatus = data.getStringExtra(RESULT_STATUS);
                    // Whatever ....
            }

}

class B extends Activity {
    public static final String EXTRA_RATING = "EXTRA_RATING";
    public void onCreate(Bundle b) {
        // Whatever ....
        int rating = getIntent().getIntExtra(EXTRA_RATING,0);
    }

    // Whatever ....

    public void returnDataAndFinish(String status) {
        Intent result = new Intent();
        result.putExtra(A.RESULT_STATUS, status);
        setResult(RESULT_OK, result);
        finish();
    }
}
...