ExecuteTrainingActivity

ExecuteTrainingActivity

我在该应用上有3个活动:

MainMenuActivity-> ExecuteTrainingActivity-> ExecuteExerciseActivity。

从MainMenuActivity到ExecuteTrainingActivity,我为ExecuteTrainingActivity查询传递了idExecution和idExercise并加载了初始数据。

ExecuteTrainingActivity onCreate:

@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();
        }
    }
}


在第三个活动ExecuteExerciseActivity中,我有一个TimerFragment,当TimerCountdown达到0时,它将打开一个Notification弹出窗口,当单击该窗口时,将打开一个新的ExecuteExerciseActivity。

在此TimerFragment上,我为Extras传递了相同的id,因此可以在新的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时,我无法将Id传递给ExecuteTrainingActivity查询和加载。

有没有办法在BackPress上传递参数?
最好的方法是否替代onBackPress创建新的意图并启动新的Activity?

**我的清单正确使用了parentActivityName。

最佳答案

将查询和ID保存到ExecuteExerciseActivity的onDestroy中的SharedPreferences中,然后在旧的ExecuteTrainingActivity中再次拉出查询和ID。 onBackPressed会触发活动生命周期的onDestroy事件。然后在ExecuteTrainingActivity的onResume中拉出此数据。

10-06 10:53