2011-05-19 70 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