如何隐藏spinner下拉列表android

如何隐藏spinner下拉列表android,android,spinner,android-spinner,Android,Spinner,Android Spinner,我想在外部单击时隐藏微调器提示弹出窗口。若提示弹出窗口打开且用户按home键活动将最小化,则当用户再次打开应用程序时,提示弹出窗口应消失。 有没有办法做到这一点。 多谢各位 编辑:-未自定义提示弹出窗口。所以我不能在onPause或onResume方法中隐藏它们 您可以将活动作为对话框主题弹出。 重写方法 暂停时受保护的无效{ super.onPause; 这是我的终点; } 嗯,这比我想象的要复杂一些 我在这里添加一步一步的细节。试着跟随它。我能够在api级别10中实现这一点 这个解决方案假设

我想在外部单击时隐藏微调器提示弹出窗口。若提示弹出窗口打开且用户按home键活动将最小化,则当用户再次打开应用程序时,提示弹出窗口应消失。 有没有办法做到这一点。 多谢各位

编辑:-未自定义提示弹出窗口。所以我不能在onPause或onResume方法中隐藏它们

您可以将活动作为对话框主题弹出。 重写方法

暂停时受保护的无效{ super.onPause; 这是我的终点; }


嗯,这比我想象的要复杂一些

我在这里添加一步一步的细节。试着跟随它。我能够在api级别10中实现这一点

这个解决方案假设当用户单击Home按钮时,或者如果您必须在没有用户交互的情况下移动到下一个活动时,您应该以编程方式关闭提示对话框

第一步是通过扩展微调器类来创建自定义微调器。 比方说,我在com.bts.sampleapp包中创建了一个名为CustomSpinner的类

我的CustomSpinner类看起来像这样

package com.bts.sampleapp;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.Spinner;

    public class CustomSpinner extends Spinner{
        Context context=null;

        public CustomSpinner(Context context) {
            super(context);
            this.context=context;
        }

        public CustomSpinner(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }

        public CustomSpinner(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        @Override
        public void onDetachedFromWindow() {
            super.onDetachedFromWindow();
        }
    }
现在,在Xml文件中,用这个自定义微调器替换微调器元素

        <com.bts.sampleapp.CustomSpinner
        android:id="@+id/spin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
最后一步是在用户单击HomeButton或活动移到后台时关闭对话框。要做到这一点,我们像这样覆盖onPause

@Override
    protected void onPause() {
        Log.i("Life Cycle", "onPause");
        spin.onDetachedFromWindow();
        super.onPause();
    }
现在,在onPause调用方法spin.onDetachedFromWindow中;它为您关闭提示对话框


还调用spin.onDetachedFromWindow;如果微调器提示对话框处于打开状态,则应在活动中的任何位置关闭该对话框。

根据Andro的回答,您可能更希望反射能够在AttachedFromWindow上调用受保护的方法。然后,您不必对微调器进行子类化、调整布局等

/**
 * Hides a spinner's drop down.
 */
public static void hideSpinnerDropDown(Spinner spinner) {
    try {
        Method method = Spinner.class.getDeclaredMethod("onDetachedFromWindow");
        method.setAccessible(true);
        method.invoke(spinner);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
微调器;清晰聚焦


这是一条简单的线,可以通过编程关闭微调器

盲猜,所以它不是答案:从这个角度关注onResume不会解决问题吗?你需要使用onStart或onResume方法。它是有效的。。。还有一件事,我们可以在微调器中选择相同的项目两次。。我认为我们需要为此修改customspinner类?你是说像多重选择?我不确定。我没有试过。很抱歉..没有多个选择假设您的微调器有5个项目您选择了项目2,那么如果您选择项目2微调器将不会触发选择方法谢谢。这是我发现唯一有效的方法。我正在使用语音界面选择微调器项目,当所说的单词与列表中的项目匹配时,需要将其关闭。我如何检测微调器弹出窗口是否被项目选择关闭,或者是否在弹出窗口外触摸。。。???
/**
 * Hides a spinner's drop down.
 */
public static void hideSpinnerDropDown(Spinner spinner) {
    try {
        Method method = Spinner.class.getDeclaredMethod("onDetachedFromWindow");
        method.setAccessible(true);
        method.invoke(spinner);
    } catch (Exception e) {
        e.printStackTrace();
    }
}