안드로이드 인텐트 질문드립니다.

조회수 995회

메인 액티비티 입니다.

ImageView likeButton;
TextView likeCountView;
ImageView hateButton;
TextView hateCountView;
CommentAdapter adapter;
Button allView;
ArrayList<CommentItems> items;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    likeButton = findViewById(R.id.likeButton);
    likeCountView = findViewById(R.id.likeCountView);

    hateButton = findViewById(R.id.hateButton);
    hateCountView = findViewById(R.id.hateCountView);

    TextView writeButton = findViewById(R.id.button_write);

    allView = findViewById(R.id.button_allView);

    ListView listView = findViewById(R.id.listView);
    items = new ArrayList<CommentItems>();
    items.add(new CommentItems("kim78**", 5, "적당히 재밌다. 오랜만에 잠 안오는 영화 봤네요.", R.drawable.user1));
    items.add(new CommentItems("kim78**", 5, "적당히 재밌다. 오랜만에 잠 안오는 영화 봤네요.", R.drawable.user1));
    items.add(new CommentItems("kim78**", 5, "적당히 재밌다. 오랜만에 잠 안오는 영화 봤네요.", R.drawable.user1));
    items.add(new CommentItems("kim78**", 5, "적당히 재밌다. 오랜만에 잠 안오는 영화 봤네요.", R.drawable.user1));
    items.add(new CommentItems("kim78**", 5, "적당히 재밌다. 오랜만에 잠 안오는 영화 봤네요.", R.drawable.user1));
    items.add(new CommentItems("kim78**", 5, "적당히 재밌다. 오랜만에 잠 안오는 영화 봤네요.", R.drawable.user1));
    items.add(new CommentItems("kim78**", 5, "적당히 재밌다. 오랜만에 잠 안오는 영화 봤네요.", R.drawable.user1));
    adapter = new CommentAdapter(items);
    listView.setAdapter(adapter);

    //모두보기 버튼
    allView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), AllCommentView.class);
            intent.putExtra("items", items);
            startActivity(intent);

        }
    });

    //작성하기 버튼
    writeButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), CommentWriteView.class);
            startActivityForResult(intent, 101);
        }
    });
    }


class CommentAdapter extends BaseAdapter {
    final ArrayList<CommentItems> items;

    CommentAdapter(ArrayList<CommentItems> items) {
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        CommentItemView view = new CommentItemView(getApplicationContext());
        CommentItems item = items.get(position);

        view.setComment(item.getComment());
        view.setId(item.getId());
        view.setProFileImage(item.redId);
        view.setRatingBar(item.rating);

        return view;
    }
    }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        String comment = data.getStringExtra("comment");
        int rating = Math.round(data.getFloatExtra("rating", 0.0f));
        if (comment != null) {
            items.add(new CommentItems("kim78**", rating, comment, R.drawable.user1));
            adapter.notifyDataSetChanged();

        }
    }
}

모두보기 액티비티입니다.

public class AllCommentView extends AppCompatActivity {
Intent intent;
ArrayList<CommentItems> items;



TextView allViewWriteButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_all_comment_view);

    intent = getIntent();
    items = (ArrayList<CommentItems>) intent.getSerializableExtra("items");
    ListView allViewListView = findViewById(R.id.allview_listview);
    CommentAdapter adapter = new CommentAdapter(items);
    allViewListView.setAdapter(adapter);



    allViewWriteButton = findViewById(R.id.allviewwrite_button);
    allViewWriteButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(getApplicationContext(), CommentWriteView.class);
            startActivity(intent);
            finish();
        }
    });
}

class CommentAdapter extends BaseAdapter {
    final ArrayList<CommentItems> items;

    CommentAdapter(ArrayList<CommentItems> items) {
        this.items = items;
    }

    @Override
    public int getCount() {
        return items.size();
    }

    @Override
    public Object getItem(int position) {
        return items.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        CommentItemView view = new CommentItemView(getApplicationContext());
        CommentItems item = items.get(position);

        view.setComment(item.getComment());
        view.setId(item.getId());
        view.setProFileImage(item.redId);
        view.setRatingBar(item.rating);

        return view;
    }
}
}

작성하기액티비티 입니다.

public class CommentWriteView extends AppCompatActivity {
EditText commentText;
RatingBar ratingBar;
Button saveButton;

String comment;
float rating;


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

    exitButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

}

public void returnToMain() {
    comment = commentText.getText().toString();
    rating = ratingBar.getRating();
    Intent intent = getIntent();
        intent.putExtra("comment", comment);
        intent.putExtra("rating", rating);
        setResult(RESULT_OK, intent);
        finish();
}
}

메인 액티비티와 작성하기 액티비티 간의 인텐트는 처리를 하여 정상적으로 작동을 하는데 모두보기액티비티에서 버튼을 눌러 작성하기 화면으로 이동하여 작성을 한 후 리스트를 갱신 해줘야 하는데 감이 잡히질 않습니다...

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 메인 액티비티

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ....
        //모두보기 버튼
        allView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(getApplicationContext(), AllCommentView.class);
                intent.putExtra("items", items);
                startActivityForResult(intent, 101);
            }
        });
    }
    

    모두보기 액티비티

    public class AllCommentView extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_all_comment_view);
            ....
    
            allViewWriteButton = findViewById(R.id.allviewwrite_button);
            allViewWriteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(getApplicationContext(), CommentWriteView.class);
                    startActivityForResult(intent, 101);
                }
            });
        }
    
       @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == 101) {
                if (resultCode == RESULT_OK) {
                    final String comment = data.getStringExtra("comment");
                    final float rating = data.getFloatExtra("rating", 0.0f);
                    if (comment != null) {
                        final Intent intent = new Intent();
                        intent.putExtra("comment", comment);
                        intent.putExtra("rating", rating);
                        setResult(RESULT_OK, intent);
                    }
                }
                finish();
            }
        }
    }
    

    위 코드만 추가하면 될것 같습니다.

    기존 코드처럼 모두보기 에서 작성하기로 넘어갈때 곧 바로 finish() 를 호출하면 작성하기에서 메인으로 돌아올때 RESULT_CANCELD 이 넘어올것 이기 때문에, 메인 - 모두보기 - 작성하기 순서로 실행 된 시나리오 에서는 작성하기화면에서 나올때 모두보기의 onActivityResult() 에서 작성 된 댓글 여부를 체크해서 setResult() 값을 설정 해준뒤에 finish() 를 합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 너무감사드립니다~~!! 해결 잘 했습니다 ㅠㅠ setResult후 finish를 하면 되는 거였네요 ㅎㅎ 알 수 없는 사용자 2018.7.16 08:14

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

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

(ಠ_ಠ)
(ಠ‿ಠ)