2012-01-04 42 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

相关问题