안드로이드 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();
        }
}

하나의 액티비티에서 인텐트를 받아서 리스트뷰에 추가해도 하나밖에 추가가 되질 않습니다. 계속 여러번 추가가 되었으면 좋겠는데

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • Intent 보내는 쪽을 첨부해주시면 좋을것 같습니다. 알 수 없는 사용자 2018.7.14 17:02
  • 답변에 올려놨습니다 ㅠㅠ 감사드립니다 정말 매번 답변주시구 ㅠㅠ 알 수 없는 사용자 2018.7.14 20:33

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();
    }
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)