1

スピナーが表示されていることを伝えるために使用できるコールバック/メソッドはありますか? スピナーが表示されなくなったことを伝えるために使用できるコールバック/メソッドはありますか?

setOnItemSelectedListener/onItemSelected は、リストのアイテムが選択されたときに呼び出されますが、ユーザーがリストの外側に触れたためにリストが削除されたときにメソッド/コールバックはありますか?

4

2 に答える 2

0

スピナー メニューがいつ表示され、いつ閉じられるかを判断できるようにしたかったのです。何度も検索した後、良い解決策はあまりありませんでした。私は次のことを行うことでこれを達成することができました:

  1. カスタム スピナー クラスを作成し、次のメソッドをオーバーライドします。

    @Override
    public boolean performClick() {
    this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown
        return super.performClick();
    }
    
  2. 私のアクティビティでは、メソッド 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
    }
    

    }

幸運を!

于 2013-10-21T15:48:22.850 に答える
0

カスタムスピナーを作成することで取得できます。

レイアウトを作成したら、それをレイアウトで使用する必要があります。

// 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);
            }
        }
    });

}

}

于 2012-12-11T11:31:29.930 に答える