1

是否有一个回调/方法可以用来判断是否显示了 Spinner?是否有一个回调/方法可以用来判断 Spinner 何时不再显示?

setOnItemSelectedListener/onItemSelected is called when an item from the list is selected - but is there any method/callback when the list is removed because the user touches outside the list?

4

2 回答 2

0

我希望能够确定微调器菜单何时显示,以及何时被关闭。经过大量搜索,没有很多好的解决方案。我能够通过执行以下操作来完成此任务:

  1. 创建了一个自定义微调器类,并覆盖以下方法:

    @Override
    public boolean performClick() {
    this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown
        return super.performClick();
    }
    
  2. 在我的 Activity 中,重写 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>

主要活动.java

导入android.app.Activity;导入android.os.Bundle;导入android.view.View;导入 android.view.View.OnClickListener;导入android.widget.Button;

公共类 MainActivity 扩展 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 回答