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

Android ActionBar中的下拉菜单的更多相关文章
- Delphi访问网页中的下拉菜单
Delphi通过TWebBrowser浏览网页,然后访问该网页中的下拉菜单: uses MsHtml;procedure TForm1.Button1Click(Sender: TObject);va ...
- yii框架中的下拉菜单和单选框
yii中的下拉菜单: 第一种: <?= $form->field($model, 'parent_id')->dropDownList(ArrayHelper::map($data, ...
- 初学者--bootstrap(六)组件中的下拉菜单----在路上(10)
组件---下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 p ...
- bootstrap日期控件在火狐下的模态框中选择时间下拉菜单无效的解决办法
今天收到程序组提交的一个兼容BUG,在火狐中使用模态框加载日期控件时选择时间下拉菜单没有效果(不能点击),而在谷歌中却是好的, 排错思路:1,在当前页面主层放置一个时间控件,测试通过 2,在ajax加 ...
- bootstrap中的下拉菜单
下拉菜单必要的代码: <div class="container"> <div class="dropdown"> <butt ...
- 【网摘】C#.NET 在 MVC 中动态绑定下拉菜单的方法
1. 已知下拉菜单列表项: 在 Controller 控制器类中输入已下代码 1 public class DemoController : Controller 2 { 3 public ...
- Odoo8中“更多”下拉菜单选项指定后台执行代码
在Odoo8中的仓库模块,根据每日最小安全库存数量,系统会自动生成一些补货单,而且是一个产品会生成一笔,如果产品比较多,这里生成的补货单也会很多. 如果这里的补货单没有即时处理,那相同产品后续不会再生 ...
- Bootstrap页面布局16 - BS导航菜单和其响应式布局以及导航中的下拉菜单
代码: <div class='container-fluid'> <h2 class='page-header'>导航</h2> <!-- .navrbar ...
- PHOTOSHOP中3D下拉菜单为灰色如何设置
方法/步骤 安装好PS后,在测试3D功能时突然发不能用.如图,怎么办呢? 按“CTRL+K”打开,或者在编辑-首选项-性能-勾选“启用OpenGL绘图(D)” 在选项对话框中勾选“启用Op ...
随机推荐
- 用“逐步排除”的方法定位Java服务线上“系统性”故障(转)
一.摘要 由于硬件问题.系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降.部分(或所 有)接口超时或卡死等.其中部分故障隐藏颇深,对运维和 ...
- IE下同样的$.ajax()被调用两次,只能执行一次(第一次)
今天发现了这个问题,仅限于IE下所有浏览器包括Edge 百度了一下原来问题就在这句话:如果第二次请求与第一次请求完全相同,会直接从缓存获取. 那么就在请求时让URL变得不一样吧 $.ajax({ ty ...
- php中使用linux命令四大步骤
一.PHP中调用外部命令介绍在PHP中调用外部命令,可以用,1>调用专门函数.2>反引号.3>popen()函数打开进程,三种方法来实现: 方法一:用PHP提供的专门函数(四个):P ...
- Linux磁盘空间爆满,MySQL无法启动
OS: Cent OS 6.3 DB: 5.5.14 看到一个帖子,在服务器上安装了oracle和mysql数据库,mysql数据库忘记开启innodb_file_per_table,导致插入测试数据 ...
- 从零开始学ios开发(二十):Application Settings and User Defaults(下)
在上一篇的学习中,我们知道了如何为一个App添加它的Settings设置项,在Settings设置项中我们可以添加哪些类型的控件,这些控件都是通过一个plist来进行管理的,我们只需对plist进行修 ...
- 设计模式Builder(建造者)模式
1.出现原因 在软件系统中,有时候会面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂的对象的各个部分可能面临着剧烈的变化,但是把他们组合在一起的算法 ...
- [SC] OpenSCManager FAILED 1722
在服务器A(windows server 2008 r2)执行如下命令访问远端服务器B(windows server 2003)的服务运行状况: sc \\servername query " ...
- DataTable.Compute 性能慢的问题
问题描述 工作中碰到一个dt.Compute("max(lineid)","")来取最大行号的情况,由于dt中数据大概有4000条,发现每次调用需要0.3秒的耗 ...
- tomcat内存溢出,设置
tomcat/bin/catalina.bat里找到echo Using CATALINA_BASE: "%CATALINA_BASE%" ,在上方设置: set JAV ...
- Eclipse maven工程 Missing artifact com.sun:tools:jar:1.5.0:system 解决方法
今天同事在使用eclipse,引入一个新的maven工程时报错: Missing artifact com.sun:tools:jar:1.6.0:system 这个问题很奇怪,相同的代 ...