如何知道是否显示或不再显示微调器

时间:2012-12-11 11:29:27

标签: android spinner

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

当选择列表中的项目时,会调用setOnItemSelectedListener / onItemSelected - 但是当删除列表时是否存在任何方法/回调,因为用户触摸了列表外部?

2 个答案:

答案 0 :(得分:1)

您可以通过创建自定义微调器

来获取它

创建布局后,您应该在布局中使用它,

// 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

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

公共类MainActivity扩展Activity {     按钮按钮;     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);
            }
        }
    });

}

}

答案 1 :(得分: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&amp;&amp; #1中的标志设置为true,然后旋转器被解除(可以通过选择或在微调器外部点击)。

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (actionBarSpinner.isDropdownShown() && hasFocus) {
        actionBarSpinner.setDropdownShown(false);
        //Do you work here
    }
    

    }

  3. 祝你好运!