2012-01-04 84 views
1

我有tabhost,如果我點擊其中的任何一個,一個新的類和它相應的xml將會啓動。每個類都擴展了Activity,但我也需要每個類來擴展BroadcastReceiver。爲什麼?現在每個活動的文字和看法文字都是英文的。但在選擇器中,如果有人選擇西班牙語,那麼我需要將西班牙語的意圖廣播爲Num1,Num2,Num3類,並將其意見轉換爲西班牙語。我可以讓公共類Num1 extends 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類可能只擴展一個基類。 – 2012-01-04 02:17:01

+0

您必須有某種形式的機制來完成像* interfaces *這樣的多重繼承的需要。否則,Java不會直接支持爲一個類繼承多個類的概念。 – Lion 2012-01-04 02:19:33

回答

7

您不能擴展兩個類。通常的方式來處理,這是定義一個內部類:

public class MyActivity extends Activity { 
    private mBroadcastReceiver; 

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

在這段代碼的內部類是BroadcastReceiver一個匿名子類。您還可以創建一個單獨的類,它在構造函數中傳遞了一個活動的實例。然後,它可以根據需要回撥您的活動。

+0

您可以給廣播一個意圖的例子,設置==西班牙語或英語的信息,然後接收器的全球廣播的處理? – lilzz 2012-01-04 02:23:28

+0

@lilzz - 在思考了你想要完成的事情之後,我認爲使用廣播接收器是過度的。糾正我,如果我錯了,但似乎你正在嘗試在一個應用程序內完成所有這些。將當前語言設置存儲爲共享首選項會更容易,然後每個活動都可以檢查'onResume'中的首選項設置,或者將自己註冊爲「OnSharedPreferenceChangeListener」。有關更多信息,請參見[SharedPreferences](http://developer.android.com/reference/android/content/SharedPreferences.html)。 – 2012-01-04 05:21:40

相關問題