嗯,它比我想象的要复杂一些。
我在这里添加分步详细信息。尝试跟随它。我能够在 api 级别 10 中实现这一点。
并且此解决方案假定您应该在用户单击主页按钮时以编程方式关闭提示对话框,或者如果您必须在没有用户交互的情况下移动到下一个活动
第一步是通过扩展 Spinner 类来创建自定义 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 或 Activity 移至后台时关闭对话框。为此,我们像这样覆盖 onPause(),
@Override
protected void onPause() {
Log.i("Life Cycle", "onPause");
spin.onDetachedFromWindow();
super.onPause();
}
现在在 onPause() 中调用 spin.onDetachedFromWindow(); 方法,它会为您关闭提示对话框。
如果 Spinner 提示对话框已打开,则从 Acitivity 中的任何位置调用 spin.onDetachedFromWindow(); 也会关闭它。