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

Android 자식 액티비티에서 부모액티비티의 내부클래스 메소드를 실행하는 방법

0 추천
부모 액티비티

public class ScanActivity extends AppCompatActivity {

...

 public static class ScanResultReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {

}

}

....

 

=======================================

자식액티비티

@Override
    public void onCreate(Bundle savedInstanceState) {

}

...............................

===========================================

 

자식액티비티(MainActivity)에서 부모액티비티에 선언된 ScanResultReceiver  클래스의

onReceive 메소드를 오버라이딩 하고 싶습니다.

그런데 아무리 해도 좋은 방법이 떠오르지 않아서 문의드립니다.ㅜㅜ
골든레미 (250 포인트) 님이 2021년 4월 13일 질문

2개의 답변

0 추천
아래처럼 하면 되지 않을까요?

public static class ChildScanResultReceiver extends ScanActivity.ScanResultReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ...
        }
}
디자이너정 (42,810 포인트) 님이 2021년 4월 13일 답변
0 추천

콜백을 이용하면 어떨까요?

public class ScanActivity extends AppCompatActivity implements ScanResultReceiver {

   @Override
   public void onScanResultReceived(Context context, Intent intent) {

   } 

 public static class ScanResultReceiver extends BroadcastReceiver {
        interface Listener {
             void onScanResultReceived(Context context, Intent intent);
        }

        private final Listener listener;

        public ScanResultReceiver(Listener listener) {
             this.listener = listener;
        }

        @Override
        public void onReceive(Context context, Intent intent) {
                listener.onScanResultReceived(contet, intent);
        }

}

}


자식액티비티

   @Override
    public void onCreate(Bundle savedInstanceState) {


    @Override
    public void onScanResultReceived(Context context, Intent intent) {

    } 
}

더 나은 방법은  static inner class 로 된 부분을 별도의 클래스로 분리해서 사용하는 겁니다. 물론 해당 클래스와의 커뮤니케이션은 callback을 사용해서 처리하면 됩니다.

spark (227,470 포인트) 님이 2021년 4월 13일 답변
spark님이 2021년 4월 13일 수정
...