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