Android 如何阻止微调器自动选择选项?

Android 如何阻止微调器自动选择选项?,android,spinner,Android,Spinner,我在我正在做的一个应用程序中有一个微调器,当它转到OnItemSlcted时,它会自动选择第一个选项,如何以简单的方式停止 spinner2.setOnItemSelectedListener(new OnItemSelectedListener(){ @Override public void onItemSelected(AdapterView<?> parent,

我在我正在做的一个应用程序中有一个微调器,当它转到OnItemSlcted时,它会自动选择第一个选项,如何以简单的方式停止

 spinner2.setOnItemSelectedListener(new OnItemSelectedListener(){


                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                View view,
                                int pos, long id) {
spinner2.setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共无效项(AdapterView父项,
视图视图,
内部位置,长id){
我如何以一种简单的方式阻止这种情况

 spinner2.setOnItemSelectedListener(new OnItemSelectedListener(){


                        @Override
                        public void onItemSelected(AdapterView<?> parent,
                                View view,
                                int pos, long id) {

您没有。除非适配器为空且无法进行选择,否则
微调器始终有选择。您的应用程序需要始终通过各种方式处理选择。

您可以使用布尔变量来检查它是否是第一次,不要执行代码。
第二次执行代码,否则这是默认行为。

这个问题在SO和其他地方被问过很多次。例如:

一些答案和评论建议忽略(一些)回调。这适用于非常简单的用途,但它忽略了一个事实,即大多数问这个问题的人想要的是一个菜单,而不是列表模式下标准ActionBar提供的基于微调器的选项卡式导航。一些评论建议使用弹出式菜单,但我所看到的都没有提供详细信息。因此,下面是要做的:

  • 创建将在ActionBar中显示的视图,用户将在该视图上单击以查看菜单:

    View view = this.getLayoutInflater().inflate(R.layout.actionbar_view, null);
    
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
            return true;
        }
    });
    
  • 创建定位到该视图的弹出菜单:

    PopupMenu popup = new PopupMenu(this, view);
    popup.getMenuInflater().inflate(R.menu.actionbar_menu, popup.getMenu());
    
  • 在显示弹出菜单的视图中添加一个
    OnClickListener

    view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popup.show();
        }
    });
    
  • 在弹出菜单中添加一个
    OnMenuItemClickListener
    ,以便在用户从菜单中选择时接收通知:

    View view = this.getLayoutInflater().inflate(R.layout.actionbar_view, null);
    
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
            return true;
        }
    });
    
  • 最后,使用以下方法在活动中配置ActionBar:

    ActionBar ab = this.getActionBar();
    ab.setCustomView(view);
    ab.setDisplayShowCustomEnabled(true);
    ab.setDisplayShowTitleEnabled(false);
    
  • 一条评论是,将主视图样式设置为与默认ActionBar匹配可能有点棘手。请尝试调查以下样式资源:

    @android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title
    @android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse
    @android:style/TextAppearance.Holo.Widget.ActionBar.Title
    @android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse
    
    否则,您至少需要正确的颜色和文本大小(可能中等)。视图本身显然应该
    填充父视图
    ,并具有
    垂直中心
    重力


    “努夫说.

    这是默认行为。你还期望什么呢???这对你很有用,我以前也有同样的问题:最好使用弹出菜单而不是微调器。就像这个一样,我选择了(){if(firstTime){firstTime=false;return true;}