У меня есть, как мне казалось, простая задача. У меня есть список достижений в recyclerView в моей основной активности. Нажатие на одно из достижений запускает AchievementDetailActivity. Вы выполняете действие в AchievementDetailActivity, и достижение завершается. Когда это произойдет, мне нужно, чтобы миниатюра в MainActivity была значком достижения, а не значком блокировки. Я думал, что могу просто использовать LocalBroadcastManager для отправки и получения сообщений от одного действия к другому, но это не работает. Судя по всему, что я прочитал, вы должны отменить регистрацию прослушивателя в методах жизненного цикла активности onPause и onStop, однако, если вы отмените регистрацию прослушивателя в onPause MainActivity, он будет отменен при запуске AchievementDetailActivity, и в MainActivity ничего не будет доставлено. Я не понимаю, как вы можете использовать LocalBroadCastManager с получателями для отправки информации между действиями, когда они отменяются, как только вы начинаете новое действие. В следующем примере показано, что он отменяет регистрацию, как только запускается второе действие, поэтому первое действие никогда не получит широковещательную рассылку...
Код: Выделить всё
public class MainActivity extends AppCompatActivity {
public static final String ACTION = "update";
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("MAIN ACTIVITY", "RECEIVED EVENT");
}
}
public void onStart() {
super.onStart();
LocalBroadcastManager.getInstance(this).registerReceiver(receiver), new IntentFilter(ACTION));
}
public void onPause() {
Log.d("MAIN ACTIVITY", "REMOVING LISTENER");
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
}
//.. The rest of MainActivity
}
public class SecondActivity extends AppCompatActivity {
@Override
public void onStart() {
super.onStart();
//initialize view and such
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getApplicationContext());
Intent intent = new Intent(MainActivity.ACTION);
intent.putExtra("Something", "somewhere");
manager.sendBroadcast(intent);
}
)};
}
Если вы запустите вышеуказанное, очевидно, с кнопками и тому подобным, вы получите сообщение, которое показывает, что он отменяет регистрацию прослушивателя, как только запускается SecondActivity, и MainActivity никогда не получит сообщение, которое он должен получить, когда вы нажимаете кнопку во втором действии.
Есть ли способ отправлять информацию от действия к действию, или из-за событий жизненного цикла это невозможно? Все, что я читал, говорило о том, что LocalBroadcastManager — правильный способ сделать это, но его регистрация отменяется, так как же это возможно? Пожалуйста, помогите, это сводит меня с ума. Спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/508 ... -correctly