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

다이얼로그에서 값을 activity로 주려면 어떻게 해야하나요 ?

0 추천

main에 

private int app_id
public int getApp_id() {
    return app_id;
}

public void setApp_id(int app_id) {
    this.app_id = app_id;
}

 

전역 변수를 선언하고 dialog에서 set해주려고 합니다.

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MainActivity mMainActivity = ((MainActivity)mContext.getApplicationContext());
mMainActivity.setApp_id(appinfo.get(position).getApp_id());

 

근데 

 E/AndroidRuntime: FATAL EXCEPTION: main
                                                                    Process: kr.co.igsinc.aquan, PID: 31942
                                                                    java.lang.ClassCastException: android.app.Application cannot be cast to kr.co.igsinc.aquan.MainActivity

이런 오류가 뜨면서 죽어버리네요.. 

어떻게 접근해야하나요 ?

now882002 (3,860 포인트) 님이 2017년 11월 27일 질문

1개의 답변

0 추천
해당 오류는 Dialog 생성 시 application context로 초기화하는데 강제로 activity로 캐스팅해서 발생하는 오류입니다.

반대로 생각하시면 됩니다. Dialog에 값을 저장해두고 사용할 때 Dialog의 변수값을 가져오는 방식으로 사용할 수 있습니다.

좀 더 복잡하게 가면 Custom LIstener 인터페이스를 만들고 리스너를 DIalog에 등록시켜서 해당 로직을 수행하는 방법이 있습니다.
minor (13,710 포인트) 님이 2017년 11월 27일 답변
DIalog에 전역변수를 두라는 말인가요 ??
어떻게 main에서 가져오나요 ? ㅠㅠ
네 맞습니다. Dialog 클래스를 상속받아서 따로 구현하신거 아닌가요?
따로 클래스를 extend하지 않았다면 getter/setter 없이 필드변수에 접근이 가능합니다.
dialog가 activity의 내부 변수이거나 내부 클래스인 경우에는
app_id = appinfo.get(position).getApp_id; 가 가능합니다.
public class AppChoiceDialog extends Dialog {
private int app_id;
 public int getApp_id() {
        return app_id;
    }

    public void setApp_id(int app_id) {
        this.app_id = app_id;
    }
}
이렇게 두고 mainactivity 에서

AppChoiceDialog mAppChoiceDialog = (AppChoiceDialog) getApplicationContext();
이렇게 하려고하니 빨간줄 뜨면서 안됩니다.;
getApp_ID() 어떻게 접근해야하나요 ?
전부 context 앞에 괄호와 클래스를 붙이면 되는건 아닙니다...
Java에 대해서 조금 더 공부해보시는걸 추천해드립니다.

AppChoiceDialog mAppChoiceDialog = new AppChoiceDialog(this);
mAppChoiceDialog.getApp_ID();

하시면 될 것 같습니다.
android에서는 getter/setter의 사용을 하지 않는 것을 권고하고 있습니다.
...