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

时间: 2024-12-19 21:01:45

Android ActionBar中的下拉菜单的相关文章

Delphi访问网页中的下拉菜单

Delphi通过TWebBrowser浏览网页,然后访问该网页中的下拉菜单: uses MsHtml;procedure TForm1.Button1Click(Sender: TObject);var  doc: IHTMLDocument2;  coll: IHTMLElementCollection;  iPos, iIndex: Integer;  selElem: IHtmlSelectElement;  optElem: IHtmlOptionElement;begin  doc :

Bootstrap中的下拉菜单

下拉菜单(基本用法) 小伙伴们注意,在Bootstrap框架中的下拉菜单组件是一个独立的组件,根据不同的版本,它对应的文件: ?  LESS版本:对应的源码文件为 dropdowns.less ?  Sass版本:对应的源码文件为 _dropdowns.scss ?  编译后的Bootstrap版本:查看bootstrap.css文件第3004行-第3130行 在使用Bootstrap框架的下拉菜单时,必须调用Bootstrap框架提供的bootstrap.js文件.当然,如果你使用的是未编译版

yii框架中的下拉菜单和单选框

yii中的下拉菜单: 第一种: <?= $form->field($model, 'parent_id')->dropDownList(ArrayHelper::map($data,'cat_id','new_cat_name') ,['prompt' => '请选择父级分类']) ? 第二种: <?= $form->field($model, 'banner_address')->dropDownList(ArrayHelper::map(address::fi

初学者--bootstrap(六)组件中的下拉菜单----在路上(10)

组件---下拉菜单 用于显示链接列表的可切换.有上下文的菜单.下拉菜单的 JavaScript 插件让它具有了交互性. 将下拉菜单触发器和下拉菜单都包裹在 .dropdown 里,或者另一个声明了 position: relative; 的元素.然后加入组成菜单的 HTML 代码.代码与效果如下: <div class="dropdown"> <button class="btn btn-default dropdown-toggle" type=

【网摘】C#.NET 在 MVC 中动态绑定下拉菜单的方法

1. 已知下拉菜单列表项: 在 Controller 控制器类中输入已下代码  1 public class DemoController : Controller 2 { 3     public ActionResult BindDropDownList() 4     { 5         List<SelectListItem> select1 = new List<SelectListItem> 6         { 7             new SelectL

rf中关于下拉菜单的选择

刚才在使用rf模拟QQ注册的时候,遇到了出生年月日等下拉菜单的选择. 之前混迹于rfs群里,经常能见到select from list by value/label 的关键字,所以尝试了一下. 结果不太理想,去社区搜寻了一下,发现这个下拉菜单不是标准的select下拉菜单,所以改用click element关键字,定位到需要的选项就好了. 其实在webdriver里面遇到下拉菜单也是直接定位然后点击的. 在选择的过程中发现年份的下拉菜单比较长,可能要选择的年份在界面不可见的地方,也就是需要下拉滚

安卓微信中bootstrap下拉菜单无法正常工作的解决方案

bootstrap下拉菜单组件描述:http://v3.bootcss.com/components/#dropdowns 问题环境:安卓4.4.2,微信6.2内置浏览器,bootstrap 3.1.1.1 问题描述:bootstrapV3的下拉菜单组件,在ios的微信浏览器中表现正常,但安卓微信浏览器中无法正常触发,安卓非微信浏览器可以触发 问题触发条件:未知 解决方案:去除button元素的属性data-toggle="dropdown",自己另外写一小段事件监听代码来切换div.

Odoo8中&ldquo;更多&rdquo;下拉菜单选项指定后台执行代码

在Odoo8中的仓库模块,根据每日最小安全库存数量,系统会自动生成一些补货单,而且是一个产品会生成一笔,如果产品比较多,这里生成的补货单也会很多. 如果这里的补货单没有即时处理,那相同产品后续不会再生成新的补货单. 所以采购人员要求不处理的补货单可以手动来取消,这样方便第二天能产生出新的补货单. 现在取消补货单的功能是放在form视图中,需要逐张单据点开,再去点取消按钮,不方便操作.采购人员希望是可以全选一次取消所选单据,根据之前的经验,我们可以在tree视图的"更多"按钮下加一个菜单

easyui中的下拉菜单是树形结构时如何实现onchange方法

今天碰到一个问题就是我写的代码中的一个下拉列表显示的是树型菜单,代码如下(使用的是easyui): .... <tr> <td>地区:</td> <td><input type="combo" id="areaId" name="areaId" class="easyui-combotree" data-options="{url:'areaTree'}"