안드로이드 intent 질문드립니다.
조회수 1030회
public void getIntentProcess(Intent intent) {
String comment = intent.getStringExtra("comment");
int rating = Math.round(intent.getFloatExtra("rating", 0.0f));
if (comment != null) {
items.add(new CommentItems("kim78**", rating, comment, R.drawable.user1));
adapter.notifyDataSetChanged();
}
}
하나의 액티비티에서 인텐트를 받아서 리스트뷰에 추가해도 하나밖에 추가가 되질 않습니다. 계속 여러번 추가가 되었으면 좋겠는데
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
startActivity()
를 호출할경우 Activity 가 새로 호출 되기 때문에 원하시는 기능을 구현하기 위해서는CommentWriterView
를 호출할때startActivityForResult()
를 사용하고,setResult()
후finish()
를 통해 다시 Activity 로 돌아오면onActivityResult()
에서 리스트를 갱신하도록 하셔야 합니다.제가 지금 예제코드를 작성할 상황이 못되서 한번 해보시고 잘 이해가 안되시면 자세히 알려드리겠습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
- 하나의 인텐트는 단순히 A->B B->A로만 DATA를 보내고 받고 하나의 인텐트는 C->B B->A로 하여 B에서 DATA를 보내 A에서 받아서 처리하는 구조입니다... 이부분때문에 헷갈립니다...ㅠㅠ 알 수 없는 사용자 2018.7.15 10:25
- activity 전환 시 단순 startActivity 로 이동 하는게 아닌, activity 스택을 고려할때 A->B 에서 B->A 로 돌아갈때 A에서 B에서 처리된 데이터를 받아서 뭔가 핸들링을 해야 한다면 애초에 A->B 상황에서 startActivityForResult() 를 호출하고, A 로 다시 돌아오면 onActivityResult() 에서 받아서 처리해야 합니다 알 수 없는 사용자 2018.7.15 11:37
- 네 이해했습니다!! 그럼 혹시 C->B로 startActivity 한 후 B에서 DATA를 받아서 받아 A로 Intent를 보낼때는 어떻게 해야 될런지요~? 알 수 없는 사용자 2018.7.15 12:07
- A 가 새로 호출되는 상황이라면 일반적으로 Activity 를 호출하듯이 Intent 에 putExtra 로 담아서 startActivity() 를 하면 될것 같네요 알 수 없는 사용자 2018.7.15 12:19
- 감사합니다! A->B로 가능 처리는 아래와 같이 코드 수정하여 정상적으로 작동되는거 확인했습니다. 근데 C->B로 Intent를 받아 button 클릭 처리 하는 부분을 잘 모르겠습니다.... 알 수 없는 사용자 2018.7.15 12:30
- C 에서 B Activity 로 넘어간 뒤 button 을 클릭하면 어떤 동작이 실행되야 하나요? 알 수 없는 사용자 2018.7.15 12:39
- 똑같은 동작입니다 아래 returntoMain과 같은 동작이요~ 알 수 없는 사용자 2018.7.15 12:44
- 음.. 제가 정확하게 이해가 잘 안되는데 B 에서 똑같이 받아서 똑같이 C 로 넘겨주는 흐름이 아닌가요? 알 수 없는 사용자 2018.7.15 13:30
- 메인 엑티비티에서 댓글 작성하기 버튼을 클릭하여 CommentWriteView 액티비티에서 글을 작성할 수 있고 메인액티비티에서 모두 보기 버튼을 눌러 모두보기 액티비티에서 작성하기 버튼을 눌러 CommentWriteView 액티비티로 이동 후 CommentWriteView 액티비티에서 작성을 할 수 있도록 만드는 중입니다 알 수 없는 사용자 2018.7.15 13:53
- 아 그렇군요. 메인 : A , 모두보기 : B, 글작성 : C 라고 가정해보면 1. A->C->A (댓글 갱신) 2.A->B->C->B->A 이렇게 두개 시나리오가 있겠네요. 2번의 경우 A->B 시점에서 startActivityForResult() 를 호출합니다. 또한 B->C 에서도 startActivityForResult() 를 호출 합니다. C 에서 만약 글이 작성 되었다면, (RESULT_OK) B 의 onActivityResult() 에서 C 에서 작성 된 값을 가지고 있다가 다시 A 로 돌아 갈때 만약 작성 된 댓글이 있는 경우 setResult() 를 RESULT_OK 및 작성 된 값을 Intent 에 담아 주시면 A 의 onActivityResult() 에서 RESULT_OK 이고 Intent 에 작성 된 댓글 데이터가 있는 경우 리스트를 갱신 해주시면 됩니다. 알 수 없는 사용자 2018.7.15 14:21
-
-
public class CommentWriteView extends AppCompatActivity { EditText commentText; RatingBar ratingBar; Button saveButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_comment_write_view); commentText = findViewById(R.id.editText_comment); ratingBar = findViewById(R.id.write_ratingbar); saveButton = findViewById(R.id.saveButton); Button exitButton = findViewById(R.id.exitButton); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); String comment = commentText.getText().toString(); float rating = ratingBar.getRating(); intent.putExtra("comment", comment); intent.putExtra("rating", rating); startActivity(intent); returnToMain(); } }); exitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } public void returnToMain() { String comment = commentText.getText().toString(); float rating = ratingBar.getRating(); Intent intent = getIntent(); intent.putExtra("comment", comment); intent.putExtra("rating", rating); setResult(RESULT_OK, intent); finish(); } }
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력