Android底栏菜单onclick动作

时间:2011-05-19 06:55:25

标签: android android-widget onclick listener android-menu

我希望在每个页面的应用程序中都有一个通用的底部菜单栏。我设计了底栏,但我对菜单图标的onClick事件感到困惑。我是否必须为每个活动类编写onClick监听器的代码以使条形图可见并在每个页面中工作或者如果有任何其他方式我可以创建一个位于每个页面的公共底部条,而不是在每个页面中编写菜单代码活动课。

我尝试通过创建基类并在其他子类中扩展它来创建, 正如dave.c在帖子Android creating Bottom Bar Menu中所述,但它对我没有用。 请建议。感谢。

1 个答案:

答案 0 :(得分:2)

简单示例(如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。