[안드로이드 스튜디오] [자바] 인텐트 화면전환 문제
조회수 207회
안드로이드 스튜디오에서 자바로 앱을 개발하고 있습니다. CategoryActivity.java에서 특정 버튼을 누르면 그 버튼의 인덱스와 텍스트 값을 인텐트로 전달하고, TasklistActivity.java의 EditText에 버튼의 텍스트 값이 적혀지게 됩니다. TasklistActivity.java에서는 EditText값을 수정할 수 있고, 수정한 값을 인텐트로 CategoryActivity와 SecondActivity에 전달해 CategoryActivity에서는 버튼의 텍스트 값이 변경되고, SecondActivity에서는 category_menu라는 팝 메뉴의 item title 값을 변경하도록 제작하였습니다. 저는 TasklistActivity에서 EditText 값을 수정하고 확인 버튼(btnBack)을 누르면 CategoryActivity로 돌아가기를 원하는데 계속해서 SecondActivity로 돌아가는 문제가 있습니다. 어떻게 해도 해결이 되지 않아 지푸라기라도 잡는 심정으로 글을 올립니다....
[CategoryActivity.java]
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && data != null){
modifiedText = data.getStringExtra("modifiedText");
buttons[clickButtonIndex].setText(modifiedText); // 배열을 통해 접근하여 텍스트 변경
saveButtonText(clickButtonIndex, modifiedText); // 변경된 텍스트를 SharedPreferences에 저장
// SecondActivity로 수정된 텍스트와 버튼 인덱스 전달
Intent intent = new Intent(CategoryActivity.this, SecondActivity.class);
intent.putExtra("modifiedText", modifiedText);
intent.putExtra("clickButtonIndex", clickButtonIndex);
startActivity(intent);
}
}
for (int i = 0; i < buttons.length; i++) {
final int index = i; // 현재 버튼의 인덱스를 저장
buttons[i].setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
categoryTitle = ((Button) view).getText().toString(); // 클릭된 버튼의 텍스트를 가져와 전역변수에 담는다
Intent intent = new Intent(getApplicationContext(), TasklistActivity.class);
intent.putExtra("categoryTitle", categoryTitle);
intent.putExtra("buttonIndex", index); // 인덱스를 전달
clickButtonIndex = index; // 클릭된 버튼의 인덱스를 저장
startActivityForResult(intent, 0);
}
});
}
[TasklistActivity.java]
// 인덱스가 0일 경우 EditText 비활성화
if(buttonIndex == 0){
edtCategory.setEnabled(false);
}
btnBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// EdtCategory의 텍스트가 변경될때마다 수정된 텍스트 저장
modifiedText = edtCategory.getText().toString();
Intent outIntent = new Intent(TasklistActivity.this, CategoryActivity.class);
outIntent.putExtra("modifiedText",modifiedText); // 수정된 텍스트를 변수로 전달
outIntent.putExtra("clickButtonIndex", buttonIndex);
setResult(RESULT_OK, outIntent);
finish();
}
});
[SecondActivity.java]
// second 화면에서 category 버튼을 누를 경우 PopupMenu로 미리 제작해둔 category_menu.xml이 뜨도록 함
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PopupMenu popupMenu = new PopupMenu(SecondActivity.this, btn2);
popupMenu.getMenuInflater().inflate(R.menu.category_menu, popupMenu.getMenu());
if (buttonIndex >= 0 && buttonIndex < popupMenu.getMenu().size()){
popupMenu.getMenu().getItem(buttonIndex-1).setTitle(modifiedText);
}
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
// 전역변수에 category_menu.xml의 item 이름을 받아 main으로 전달
selectedCategory = menuItem.getTitle().toString();
return false;
}
});
popupMenu.show();
}
});
여러번 시행착오를 겪은 결과 CategoryActivity의
// SecondActivity로 수정된 텍스트와 버튼 인덱스 전달
Intent intent = new Intent(CategoryActivity.this, SecondActivity.class);
intent.putExtra("modifiedText", modifiedText);
intent.putExtra("clickButtonIndex", clickButtonIndex);
startActivity(intent);
이 부분이 문제를 일으키는 것 같습니다. 허나 이 코드가 없으면 화면전환은 정상작동하나, category_menu의 item title이 변경되지 않습니다. 도와주시면 정말 감사드리겠습니다... 아직 초보라 화면이 뒤죽박죽이라면 정말 죄송합니다.
댓글 입력