簡単な例 (dave.c が示唆するように):
public class BaseActivity extends Activity {
public void onClickButton1(View view) {
Toast toast = Toast.makeText(this, "Button 1 clicked", Toast.LENGTH_SHORT);
toast.show();
}
public void onClickButton2(View view) {
Intent i = new Intent(this, MyFirstActivity.class);
startActivity(i);
}
public void onClickButton3(View view) {
Intent i = new Intent(this, MySecondActivity.class);
startActivity(i);
}
}
MyFirstActivity は次のようになります。
public class MyFirstActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_first_activity);
}
}
MySecondActivity アクティビティ:
public class MySecondActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_second_activity);
}
}
my_first_activity.xml レイアウトに以下を含めます。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="My first activity" android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<include android:layout_width="fill_parent" android:layout_height="wrap_content"
layout="@layout/bottom_bar" />
</LinearLayout>
my_second_activity.xml で:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="My second activity" android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<include android:layout_width="fill_parent" android:layout_height="wrap_content"
layout="@layout/bottom_bar" />
</LinearLayout>
bottom_bar では、onClick ハンドラーでボタンを定義します。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:text="Button1" android:id="@+id/button1" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:onClick="onClickButton1"/>
<Button android:text="Button2" android:id="@+id/button2" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:onClick="onClickButton2"/>
<Button android:text="Button3" android:id="@+id/button3" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:onClick="onClickButton3"/>
</LinearLayout>
この設計を使用すると、問題が発生する可能性があります。たとえば、一部のアクティビティで ListView を使用し、ListActivity をサブクラス化したい場合 (TabActivity は別の例です)、それは不可能です。
もう 1 つの方法は、Activity をサブクラス化し、onClick イベントを処理する 1 つの共通ハンドラーを定義することです。この場合、各アクティビティで onClick ハンドラーを定義し、対応する共通ハンドラーのメソッドを呼び出す必要があります。
もう 1 つの方法は、TabHost と TabActivity を使用することです。