在ActionBar中添加下拉菜單,主要有一下幾個關鍵步驟:html
1. 生成一個SpinnerAdapter,設置ActionBar的下拉菜單的菜單項android
2. 實現ActionBar.OnNavigationListener接口,當點擊ActionBar的菜單項是進行相應的操做數組
3. 調用setNavigationMode()方法將ActionBar的操做模型設置爲ActionBar.NAVIGATION_MODE_LIST. 注意:這個步驟應該在Activity的onCreate()回調函數時執行app
4. 調用setListNavigationCallbacks()方法爲ActionBar添加適配器和監聽器.
ide
如下是例子代碼,這個例子中只是簡單測試,ArrayAdapter是SpinnerAdapter的間接子類,這裏ActionBar中的菜單項是一個數組的數據,當點擊菜單的其中一項,就會生成一個對應的Fragment代替原來的Fragment.Fragment裏面也只有簡單的一個TextView控件,用來顯示選擇的信息。函數
自定義的Fragment:測試
public class StudentInfo extends Fragment { // Fragment對應的標籤,當Fragment依附於Activity時獲得 private String tag; @Override public void onAttach(Activity activity) { super.onAttach(activity); tag = getTag(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView textView = new TextView(getActivity()); textView.setText(tag); return textView; } }
在strings.xml中定義一個數組,這個數組就是菜單項的信息:this
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">ActionBar下拉菜單</string> <string-array name="student"> <item>鄧名僑</item> <item>劉天喜</item> <item>其黃石</item> <item>蔡宏遠</item> </string-array> </resources>
主要的程序片斷,MainActivity:spa
public class MainActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 生成一個SpinnerAdapter SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, R.array.student, android.R.layout.simple_spinner_dropdown_item); // 獲得ActionBar ActionBar actionBar = getActionBar(); // 將ActionBar的操做模型設置爲NAVIGATION_MODE_LIST actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); // 爲ActionBar設置下拉菜單和監聽器 actionBar.setListNavigationCallbacks(adapter, new DropDownListenser()); } /** * 實現 ActionBar.OnNavigationListener接口 */ class DropDownListenser implements OnNavigationListener { // 獲得和SpinnerAdapter裏一致的字符數組 String[] listNames = getResources().getStringArray(R.array.student); /* 當選擇下拉菜單項的時候,將Activity中的內容置換爲對應的Fragment */ public boolean onNavigationItemSelected(int itemPosition, long itemId) { // 生成自定的Fragment StudentInfo student = new StudentInfo(); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); // 將Activity中的內容替換成對應選擇的Fragment transaction.replace(R.id.context, student, listNames[itemPosition]); transaction.commit(); return true; } } }
程序運行結果:code