Android Studio待办清单项目返回按钮逻辑实现咨询
Hey there! Let's get that back button behavior sorted for your ToDoList app. You want the system back button to take users from the Editable Activity (second_layout) to MainActivity without passing any input data, while keeping your existing saveClick() method that sends data when the user intentionally saves. Here's how to make it work:
The key here is to override the default back button behavior in your Editable Activity—this lets us control exactly what happens when the user presses the system back button, separate from your save flow.
Step 1: Override onBackPressed() in your Editable Activity
Add this method to your Editable Activity class. It will close the current activity directly, no data attached:
@Override public void onBackPressed() { // Just finish the activity to return to MainActivity finish(); // Optional: Add a transition animation for smoother navigation (remove if not needed) overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); }
Note: The animation line is totally optional—skip it if you don't need custom screen transitions.
Step 2: Keep your saveClick() method intact
Since you already have a working saveClick() that passes data back, make sure it still uses setResult() before finishing. This ensures MainActivity only gets data when the user intentionally saves:
public void saveClick(View view) { EditText todoInput = findViewById(R.id.your_editable_input_id); String userInput = todoInput.getText().toString(); // Prepare the data to send back to MainActivity Intent resultIntent = new Intent(); resultIntent.putExtra("TODO_ITEM_KEY", userInput); setResult(RESULT_OK, resultIntent); // Close the activity to return to MainActivity finish(); }
Step 3: Confirm MainActivity handles results correctly
If you're using registerForActivityResult() (or the older startActivityForResult()) in MainActivity, it will only process data when RESULT_OK is set. That means the back button press (which doesn't set a result) won't trigger any data processing—exactly what you want.
Example with registerForActivityResult:
ActivityResultLauncher<Intent> editTodoLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), result -> { if (result.getResultCode() == RESULT_OK) { Intent data = result.getData(); if (data != null) { String newTodo = data.getStringExtra("TODO_ITEM_KEY"); // Add the saved todo item to your list here } } // No action needed if result isn't RESULT_OK (like back button press) } );
Quick breakdown of why this works:
- When the user presses the system back button, our overridden
onBackPressed()just closes the Editable Activity—no result is sent, so MainActivity gets nothing. - When the user taps your save button,
saveClick()explicitly sets a result with the input text, so MainActivity receives the data as intended.
That's all! This setup cleanly separates the "save and return" flow from the "just go back without saving" flow.
内容的提问来源于stack exchange,提问作者azazeltx

