スピナーが表示されていることを伝えるために使用できるコールバック/メソッドはありますか? スピナーが表示されなくなったことを伝えるために使用できるコールバック/メソッドはありますか?
setOnItemSelectedListener/onItemSelected は、リストのアイテムが選択されたときに呼び出されますが、ユーザーがリストの外側に触れたためにリストが削除されたときにメソッド/コールバックはありますか?
スピナー メニューがいつ表示され、いつ閉じられるかを判断できるようにしたかったのです。何度も検索した後、良い解決策はあまりありませんでした。私は次のことを行うことでこれを達成することができました:
カスタム スピナー クラスを作成し、次のメソッドをオーバーライドします。
@Override
public boolean performClick() {
this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown
return super.performClick();
}
私のアクティビティでは、メソッド onWindowFocusChanged(boolean hasFocus) をオーバーライドします。hasFocus == true && #1 のフラグが true に設定されている場合、スピナーは閉じられています (選択またはスピナーの外側をタップすることによって可能です)。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (actionBarSpinner.isDropdownShown() && hasFocus) {
actionBarSpinner.setDropdownShown(false);
//Do you work here
}
}
幸運を!
カスタムスピナーを作成することで取得できます。
レイアウトを作成したら、それをレイアウトで使用する必要があります。
// com.talha.examples はパッケージ名です
mySpinner.java
package com.talha.examples;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Spinner;
import android.widget.Toast;
public class mySpinner extends Spinner {
Context context;
public mySpinner(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
protected void onVisibilityChanged(View changedView, int visibility) {
super.onVisibilityChanged(changedView, visibility);
if(visibility == View.VISIBLE)
Toast.makeText(this.context, "VISIBLE NOW", 1000).show();
if(visibility == View.GONE)
Toast.makeText(this.context, "HAS GONE", 1000).show();
}
}
activity_main_spinner.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.talha.examples.mySpinner
android:id="@+id/mySpinner"
android:layout_width="fill_parent"
android:layout_height="300dp"
android:background="#ffffaa" >
</com.talha.examples.mySpinner>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/mySpinner"
android:text="Button" />
</RelativeLayout>
MainActivity .java
android.app.Activity をインポートします。android.os.Bundle をインポートします。android.view.View をインポートします。android.view.View.OnClickListener をインポートします。android.widget.Button をインポートします。
public class MainActivity extends Activity { Button ボタン; com.talha.examples.mySpinner mySpinner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_spinner);
mySpinner = (com.talha.examples.mySpinner) findViewById(R.id.mySpinner);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mySpinner.getVisibility() == View.VISIBLE) {
mySpinner.setVisibility(View.GONE);
} else {
mySpinner.setVisibility(View.VISIBLE);
}
}
});
}
}