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;
}
}
}
程序運行結果:

最後更新:2017-04-02 16:47:43