gpt4 book ai didi

java - 从通知启动 Activity 并在 BackPressed 上传递数据

转载 作者:行者123 更新时间:2023-12-02 10:22:45 25 4
gpt4 key购买 nike

我在应用程序上有 3 项 Activity :

MainMenuActivity -> ExecuteTrainingActivity -> ExecuteExerciseActivity。

从 MainMenuActivity 到 ExecuteTrainingActivity,我传递一个 idExecution 和一个 idExercise 来进行 ExecuteTrainingActivity 查询并加载初始数据。

创建时执行训练 Activity :

@Override
protected void onCreate(Bundle savedInstanceState) {
//...
initialize();
setupRecyclerView(exercises);
}

private void initialize() {
Bundle extras = getIntent().getExtras();

if (extras != null) {
if (extras.containsKey("id_execution")) {
idExecution = extras.getLong("id_execution");
idExercise = extras.getLong("id_exercise");

execution = queryExecution(idExecution);
} else {
insertExecution();
}
}
}

在第三个 Activity ExecuteExerciseActivity 中,我有一个 TimerFragment,当 TimerCountdown 达到 0 时,它会打开一个通知弹出窗口,单击该窗口会打开一个新的 ExecuteExerciseActivity。

在此 TimerFragment 上,我将相同的 id 作为 Extras 传递,因此我可以在新的 ExecuteExerciseActivity 中获取它们:

public class TimerFragment extends Fragment {

//...
private void showNotification(){
Intent intent = new Intent(getActivity(), ExecuteExerciseActivity.class);
intent.putExtra("id_execution", idExecution);
intent.putExtra("id_exercise", idExercise);
intent.putExtra("position", position);

TaskStackBuilder stackBuilder = TaskStackBuilder.create(getActivity());
stackBuilder.addNextIntentWithParentStack(intent);

PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

/*=== CHECK IF NOTIFICATION CHANNEL IS ACTIVE ===*/
boolean ok = isNotificationChannelEnabled(getActivity(), Constants.CHANNEL_ID);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(requireNonNull(getActivity()), Constants.CHANNEL_ID)
.setSmallIcon(R.drawable.d77)
.setContentTitle("Teste Notificação")
.setContentText("Ababa")
.setPriority(NotificationCompat.PRIORITY_HIGH)

.setContentIntent(pendingIntent)
.setAutoCancel(true);

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(getActivity());

notificationManager.notify(0, mBuilder.build());
}

从这个新的 ExecuteExerciseActivity 中,我想让系统保持相同的 Activity 导航流程,但是当我从新的 ExecuteExerciseActivity 回压到 ExecuteTrainingActivity 时,我无法传递 ExecuteTrainingActivity 查询和加载的 Id。

有没有办法在BackPress上传递参数?最好的方法是覆盖 onBackPress 创建一个新的 Intent 并启动一个新的 Activity 吗?

**我的 list 正确使用了parentActivityName。

最佳答案

将查询和 ID 保存到 ExecuteExerciseActivity 的 onDestroy 中的 SharedPreferences 中,然后在旧的 ExecuteTrainingActivity 中再次提取查询和 ID。 onBackPressed 触发 Activity 生命周期的 onDestroy 事件。然后在 ExecuteTrainingActivity 的 onResume 中将这些数据拉出来。

关于java - 从通知启动 Activity 并在 BackPressed 上传递数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54209764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com