LocalBroadcastManager неправильно принимает сообщенияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 LocalBroadcastManager неправильно принимает сообщения

Сообщение Anonymous »

У меня есть, как мне казалось, простая задача. У меня есть список достижений в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»