2012-01-04 2 views
1

탭 호스트가 있고 그 중 하나를 클릭하면 새 클래스와 해당 xml이 시작됩니다. 각 클래스는 Activity를 확장하지만 BroadcastReceiver를 확장하려면 각 클래스가 필요합니다. 왜? 현재 각 액티비티와 뷰 텍스트의 문구는 영어로되어 있습니다. 그러나 선택자가 누군가 스페인어를 선택하면 스페인어로 설정하려는 의도를 Num1, Num2, Num3 클래스와 그 견해가 스페인어로 바뀌도록 방송해야합니다. Public 클래스 Num1이 Activity, BroadcastReiver, ... 등을 확장 할 수 있습니까?Activity와 BroadcastReceiver를 모두 확장하는 클래스

host.addTab(host.newTabSpec("Num1") 
      .setIndicator("Num1", getResources().getDrawable(R.drawable.icon_light)) 
      .setContent(new Intent(this, Num1.class))); 

     host.addTab(host.newTabSpec("Num2") 
      .setIndicator("Num2", getResources().getDrawable(R.drawable.icon_wrench)) 
      .setContent(new Intent(this, Num2.class))); 

     host.addTab(host.newTabSpec("Num3") 
      .setIndicator("Num3", getResources().getDrawable(R.drawable.icon_user)) 
      .setContent(new Intent(this, Num3.class))); 
+1

아니요, Java 클래스는 단일 기본 클래스 만 확장 할 수 있습니다. –

+0

* 인터페이스 *와 같이 다중 상속의 필요성을 충족시키기위한 메커니즘이 필요합니다. 그렇지 않으면 Java는 단일 클래스에 대해 둘 이상의 클래스를 상속하는 개념을 직접 지원하지 않습니다. – Lion

답변

7

두 개의 클래스를 확장 할 수 없습니다. 내부 클래스는 BroadcastReceiver의 익명의 서브 클래스입니다이 코드에서

public class MyActivity extends Activity { 
    private mBroadcastReceiver; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     . . . 
     mBroadcastReceiver = new BroadcastReceiver() { 
      // your receiver implementation 
     }; 
     // register the receiver 
    } 
    . . . 
} 

이 처리하는 일반적인 방법은 내부 클래스를 정의하는 것입니다. 생성자에서 액티비티의 인스턴스를 전달하는 별도의 클래스를 생성 할 수도 있습니다. 그런 다음 필요에 따라 활동에 콜백을 할 수 있습니다.

+0

당신은 == 스페인어 또는 영어 설정 메시지와 함께 방송의 작은 예제를 줄 수 있고 수신기에 의해 글로벌 방송이 처리됩니까? – lilzz

+0

@lilzz - 당신이 성취하고자하는 것에 대해 더 생각한 후에, 나는 방송 수신기를 사용하는 것이 과잉이라고 생각한다. 내가 틀렸다면 나를 바로 잡아라.하지만이 모든 것을 하나의 응용 프로그램 내에서하려고하는 것 같다. 현재 언어 설정을 공유 환경 설정으로 저장하는 것이 훨씬 쉬울 것이며 각 활동은'onResume'의 환경 설정을 검사하거나'OnSharedPreferenceChangeListener'로 자신을 등록 할 수 있습니다. 자세한 내용은 [SharedPreferences] (http://developer.android.com/reference/android/content/SharedPreferences.html)를 참조하십시오. –

관련 문제