Spinnerでは、spinnerModeの設定によってdialogとdropdownで選択肢を表示できます。それらをコードからdismissしたい場合のメモです。
デフォルトではSpinnerにはdialog、dropdownをdismissするメソッドが用意されていません。そのためonDetachedFromWindow
が呼ばれるとdialog、dropdownがdismissされることを利用してコードからdismissできるようにします。
具体的には、Spinner
もしくはAppCompatSpinner
を継承して以下のようなカスタムViewを作成します。
public class MySpinner extends AppCompatSpinner {
public MySpinner(Context context) {
super(context);
}
public MySpinner(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MySpinner(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void dimissSpinnerOptions() {
onDetachedFromWindow();
}
}
使い方は、まずxmlに定義します。
<MySpinner
android:id="@+id/my_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:spinnerMode="dropdown" />
そして、以下のようにコードからdimissSpinnerOptions
を実行します。これでコードからdismissできるようになります。
MySpinner mySpinner = (MySpinner) findViewById(R.id.my_spinner);
mySpinner.dimissSpinnerOptions();