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

Callback 사용 질문입니다.

0 추천

현재 Fragment 안에 ListVIew가 있고 ListView에 BaseAdapter를  적용한 상태 입니다.

BaseAdapter에서 Activity를 startActivity를 사용하여 호출 하고 Activity 안에서는 변경된 값을 

다시 Adapter에 넘겨주어야 하는 상황입니다.

BaseAdapter에서 호출괸 Activity에는 interface가 정의되어 있고 멤버 변수로 지정해 주었습니다.


private OnVoteChangeListener mVoteChangeCallback;
 
public interface OnVoteChangeListener {
    public void OnVoteChange(int position, int myvote);
}

BaseAdapter 에서는 Activity.OnVoteChangeListener를 implemnt 해 주었고 

AsyncTask에서는 작업이 끝난 후 다음과 같이 호출을 하게 되는데 

mVoteChangeCallback.OnVoteChange(position, myvote);

Activity에서 정의된 멤버 변수를 어떻게 초기화 시켜야 하는지 궁금합니다.

 

노예의집 (23,370 포인트) 님이 2014년 12월 19일 질문

1개의 답변

0 추천
 
채택된 답변
질문이 난해 하네요, 일단 async task 가 무얼 위해 어디서 호출된다는 이야기가 없네요

일단 fragment 내에서는 getActivity 로 activity 에 접근 가능합니다. 그렇다는 이야기는 초기화 가능하다는 이야기 구요
aucd29 (218,390 포인트) 님이 2014년 12월 19일 답변
노예의집님이 2014년 12월 19일 채택됨
최상위Activity -> Fragment -> ListVIew에 BaseAdapter -> BaseAdapter에서 서브Activity 호출
이런 관계이고요

AsyncTask는 서브 Activity에서 호출됩니다. 서버에 값을 전송 하고요 전송한 값을 다시 BaseAdapter에 넘겨주어야 합니다. 서브Activity에서 BaseAdapter나 Framgment에 접근이 안되니 interface 로 구현하려고 합니다.
sub activity 를 굳이 call 을 해서 server 에 데이터를 전송해야 하는 이유가 없다면 dialog 를 이용해보시는게 가장 쉽게 풀어가는 방법 같습니다.

sub activity를 써야 한다면 아시겠지만  intent 를 startActivityForResult 로 sub activity 를 띄우고 그에 대한 결과값을 받아서 처리하시는게 android 에 대한 기본 flow를 지키고 값을 올바르게 전달 받을 수 있는 방법이라고 생각됩니다.
fragment에서 onitemclicklistener에서 startactivityforresult로 해결했습니다.
...