Получение значения от намерения (Bundle) в неактивном классе - PullRequest
1 голос
/ 29 ноября 2011

У меня есть два класса. A - это класс бездействия, а B - это вид деятельности.

В классе А я объявил

Intent intent = new Intent(xxxx.context, PDFRenderer.class);         
Bundle b = new Bundle();
b.putString("file", filePath);
intent.putExtras(b);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
xxxxx.context.startActivity(intent);

Затем в классе B я добавил метод, который возвращает логическое значение. Я поместил это в метод OnCreate().

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    ama = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
    manager = getPackageManager();
    RenderPeeDeeEff(getIntent().getStringExtra("file"));

    i = new Intent(this, RenderPdf.class);
    Bundle b = new Bundle();
    b.putBoolean("returnValue", pdfCrashed);
    b.putString("pdfResult", pdfresult);
    i.putExtras(b);

    this.finish();
}

Как передать значение Bundle b обратно в класс A, даже если я не могу использовать getIntent(), поскольку это не действие?

Ответы [ 5 ]

0 голосов
/ 29 ноября 2011

Использовать startActivityForResult.

В Activity, контекст которой вы используете для вызова startActivityForResult, реализовать onActivityResult.

В onActivityResult передать Bundle из возвращенного Intent в A

0 голосов
/ 29 ноября 2011

вы можете иметь конструктор перегрузки в вашем классе A, который принимает Bundle, с помощью которого вы можете получить желаемое значение.

0 голосов
/ 29 ноября 2011

Не могли бы вы просто иметь метод в классе A, например setBundle(Bundle bundle), в который вы передаете пакет?Это действительно зависит от отношений между А и В.

0 голосов
/ 29 ноября 2011

Кто-то предложил SharedPreference, что может быть хорошо, но проблема в том, что ваш ClassA не уведомлен о внесенных изменениях (при условии, что ваш ClassB является своего рода диалогом).Есть альтернативы, такие как регистрация BroadcastReceiver в вашем ClassA и в ClassB:

i = new Intent(this, ACTION_CLASSB_FINISH);
Bundle b = new Bundle();
b.putBoolean("returnValue", pdfCrashed);
b.putString("pdfResult", pdfresult);
i.putExtras(b);
this.sendBroadcast(i);

Если вы хотите перейти на SharedPreference, вы можете зарегистрировать Listener для прослушивания изменений в returnValue тоже.Обратите внимание на оба случая, вам все еще нужно иметь Context в ClassA, чтобы зарегистрироваться, а также отменить регистрацию, если это необходимо.

0 голосов
/ 29 ноября 2011

В вашем случае я предпочитаю использовать SharedPreference:)

...