我可以使用回调/方法判断是否显示了微调器? 是否有一个回调/方法可以用来判断Spinner何时不再显示?
当选择列表中的项目时,会调用setOnItemSelectedListener / onItemSelected - 但是当删除列表时是否存在任何方法/回调,因为用户触摸了列表外部?
答案 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)
我希望能够确定何时显示微调器菜单,并且也被解雇。经过大量的搜索,没有很多好的解决方案。我能够通过以下方式实现这一目标:
创建自定义微调器类,并重写以下方法:
@Override
public boolean performClick() {
this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown
return super.performClick();
}
在我的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
}
}