2012-01-04 10 views
1

私はtabhostを持っています。それらのいずれかをクリックすると、新しいクラスとそれに対応する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クラスは1つの基本クラスだけを拡張できます。 –

+0

*インタフェース*のような多重継承の必要性を達成するには、何らかの形式のメカニズムが必要です。それ以外の場合、Javaは単一のクラスに対して複数のクラスを継承するという概念を直接サポートしません。 – Lion

答えて

7

2つのクラスを拡張することはできません。内部クラスは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)を参照してください。 –

関連する問題