2011-05-19 47 views
1

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

我试图通过创建一个基类并将其扩展到其他子类中,如dave.c在后0123'中所述的 ,但它并不适用于我。 请建议。谢谢。

回答

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。

+0

在这个按钮不工作在下一个页面,onClick没有执行任何操作,我尝试了Toast和意图操作。 – Neetesh 2011-05-19 08:30:42

+0

我编辑了答案,我已经创建了示例项目并测试了代码,并且它工作正常 – Ludevik 2011-05-19 09:23:15