在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;
}
}
}
程序运行结果:
阅读(1600) | 评论(0) | 转发(0) |