我想在外部点击时隐藏微调器提示弹出窗口。如果提示弹出窗口打开并且用户按下主页键活动将最小化,因此当用户再次打开应用程序时,提示弹出窗口应该消失 有没有办法实现这一目标。 谢谢
编辑: - 未自定义提示弹出窗口。因此,我无法在onPause
或onResume
方法中隐藏它们。
答案 0 :(得分:17)
这比我想象的要复杂一点。
我在这里添加了一步一步的细节。尝试遵循它。我能够在api 10级实现这一目标。
此解决方案假定您应该在用户单击主页按钮时以编程方式关闭提示对话框,或者如果您必须在没有用户交互的情况下转到下一个活动
第一步是通过扩展Spinner Class来创建Custom Spinner。 我们说,我在包 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文件中,用此自定义微调器
替换Spinner元素 <com.bts.sampleapp.CustomSpinner
android:id="@+id/spin"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
下一步是在Activity类
中初始化并设置适配器到此微调器 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CustomSpinner spin=null;
spin=(CustomSpinner)findViewById(R.id.spin);
spin.setAdapter(spinnerAdapter); //you can set your adapter here.
}
最后一步是在用户单击HomeButton或活动移至后台时关闭对话框。为此,我们覆盖onPause(),如下所示,
@Override
protected void onPause() {
Log.i("Life Cycle", "onPause");
spin.onDetachedFromWindow();
super.onPause();
}
现在在onPause()中调用方法spin.onDetachedFromWindow();
,它为您完成关闭提示对话框的工作。
同样在Acitivity中的任何位置调用spin.onDetachedFromWindow();
,如果它处于打开状态,则应关闭Spinner提示对话框。
答案 1 :(得分:14)
根据Andro的回答,您可能更喜欢反射能够在onDetachedFromWindow上调用受保护的方法。然后你不必子类Spinner,调整布局等。
/**
* 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();
}
}
答案 2 :(得分:-1)
覆盖onPause方法。
protected void onPause(){ super.onPause(); this.finish(); }
答案 3 :(得分:-2)
spinner.clearFocus();
这是以行为方式关闭微调器的简单方法