Я хочу иметь общую нижнюю панель меню через приложения с каждой страницы. Я разработал нижний план, но меня смущает событие onClick значков меню. должен ли я писать код для прослушивателя onClick с каждым классом деятельности, чтобы сделать видимым и работающим на каждой странице бар, или если есть какой-либо другой способ, я могу создать общую нижнюю панель, которая лежит на каждой странице, без написания кода меню в каждом класс активности.
Я попытался создать через создание базового класса и расширить его в других дочерних классах, как указано dave.c в сообщении Android, создающем меню нижнего бара, но это не помогло мне. Пожалуйста, предложите. Спасибо.
Простой пример (по предложению 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 - еще один пример), это будет невозможно.
Другой способ заключается в подклассе Activity и определении одного общего обработчика, который обрабатывает события onClick. В этом случае вам нужно будет определить обработчики onClick в каждом действии и вызвать соответствующие методы обычного обработчика.
Еще один способ - использовать TabHost и TabActivity.