마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

BaseAdapter에서 Activity로 값을 전달하는 방법이 있나요? (토스트는 가능)

0 추천

A Activity와 BaseAdapter는 서로 다른 .java로 구현을 해놓았습니다.

 

A Activity에 GridView가 존재하며 GridView를 표현해주는 것에는 CheckBox와 TextView가 존재합니다.

CheckBox가 클릭 되었을 경우 A Activity userId라는 변수에 GridView에 있는 TextView에 있는 값을

넣고 싶습니다.

 

holder.cbDeviceId.setOnCheckedChangeListener(new OnCheckedChangeListener() {

 

@Override

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

// 눌리면 함수를 호출해서 그에맞은 아이템을 전달해주자.

   if(isChecked

      Comm.TOAST(context, "머가 눌렸나?" + item.getDeviceId());

   }

});

 

아래와 같이 표현하면 A Activity에 TextView에 아이템에 대한 내용이 뜨지만

이걸 A Activity변수로 옮기는 작업을 어떻게 하는지 궁금합니다.

 

1. A Activity에 함수를 만들어서 호출시켜야 하나요?

 -> 이런 경우는 BaseAdapter에 A Activity를 선언해 두고 함수를 호출 시켜야 하는게 맞는건가요?

 

2. Intent같은 방법이 존재할까요? 

 -> SharedPreference 같은 방법 말고 getIntent해서 하는 방법.. 이 있는지 궁금합니다.

Goni2 (770 포인트) 님이 2015년 3월 3일 질문

2개의 답변

+2 추천

가장 좋은 방법은  interface를 이용하는겁니다. 
Adapter 클래스에 

public interface OnMyItemCheckedChanged {
    public void onItemCheckedChanged(MyItem item, boolean isChecked);
}
private OnMyItemCheckedChanged mOnMyItemCheckedChanged;

public void setOnMyItemCheckedChanged(OnMyItemCheckedChanged  onMyItemCheckedChanged){
    this.mOnMyItemCheckedChanged = onMyItemCheckedChanged;
}

전역에 이렇게 작성하시고.

Comm.TOAST(context, "머가 눌렸나?" + item.getDeviceId()); 
요부분에
if(mOnMyItemCheckedChanged != null)
   mOnMyItemCheckedChanged.onItemCheckedChanged (item, isChecked);

이렇게 작성해 주세요.

activity에서 
mAdapter.setOnMyItemCheckedChanged(new OnMyItemCheckedChanged(){

..........중략...

});


요렇게 선언해 주시면 됩니다.

이드로이드 (22,930 포인트) 님이 2015년 3월 3일 답변
아직 부족한지라 설명이 완벽하게 이해되지 않지만
이게 옳은 방법이라고 하니 사용해보도록 하겠습니다.

바쁜 시간에 답변해주셔서 정말 감사합니다!
+1 추천
좋은 디자인은 아니지만 굳이 하시겠다면

A Activity 에 값을 set 할 수 있는 함수를 만드시고

if (isChecked) {

    ((AActivity) context).setSelectedDeviceId(item.getDeviceId());

}

 

정도로 하시면 되겠네요.

단 BaseAdapter 를 A Activity 에서 생성하여 new BaseAdapter(this); <- this 가 A Activity

정도가 선행되어야 합니다
mamondebaltob (32,750 포인트) 님이 2015년 3월 3일 답변
답변 정말 감사합니다.

제가 아직 안드로이드에 대한 이해도가 부족해서 인지
BaseAdapter에 A Activity를 생성하니 서로 연결이 안되서 인지
데이터를 주고받지 못하더라구요. 그래서 set Method와 변수를 static으로 선언
해서 사용해보았습니다.

단 BaseAdapter 를 A Activity 에서 생성하여 new BaseAdapter(this); <- this 가 A Activity

정도가 선행되어야 합니다

라고 말씀해주셨는데 .. 이해가 잘 안되서요 ㅜㅜ 왜 저렇게 해야 할까요>
저 this를 BaseAdapter에서 받아서 context에 넣고 쓰려고 하는 건가요?
...