ActionBar中的下拉菜單操作


  在ActionBar中添加下拉菜單,主要有一下幾個關鍵步驟:

  1. 生成一個SpinnerAdapter,設置ActionBar的下拉菜單的菜單項

  2. 實現ActionBar.OnNavigationListener接口,當點擊ActionBar的菜單項是進行相應的操作

  3. 調用setNavigationMode()方法將ActionBar的操作模型設置為ActionBar.NAVIGATION_MODE_LIST. 注意:這個步驟應該在Activity的onCreate()回調函數時執行

  4. 調用setListNavigationCallbacks()方法為ActionBar添加適配器和監聽器.

   

  以下是例子代碼,這個例子中只是簡單測試,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中定義一個數組,這個數組就是菜單項的信息:

<?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:

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; } } }

 

   程序運行結果:

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM