我想在Spinner外部点击后关闭一个Android微调器。这甚至可能吗?
答案 0 :(得分:1)
尝试
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) v.setVisibility(View.GONE);
}
答案 1 :(得分:1)
我已经幸运了,即使它没有完全奏效。
public View getView(int position, View v, ViewGroup parent) {
if (v == null) {
LayoutInflater mLayoutInflater = mActivity.getLayoutInflater();
v = mLayoutInflater.inflate(R.layout.user_row, null);
}
View tempParent = (View) parent.getParent().getParent().getParent();
tempParent.setOnTouchListener(new MyOnTouchListener(mActivity));
mActivity.setOpen(true);
User getUser = mUsers.get(position);
return v;
}
public class MyOnTouchListener implements OnTouchListener{
private MyActivity mOverall;
public MyTouchListener(MyActivity overall) {
mOverall = overall;
}
public boolean onTouch(View v, MotionEvent event) {
if (mOverall.getOpen()) {
mOverall.getWindow().setContentView(R.layout.main); //reset your activity screen
mOverall.initMainLayout(); //reset any code. most likely what's in your oncreate
}
return false;
}
}
public class MySelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos,
long id) {
setUser(pos); //or whatever you want to do when the item is selected
setOpen(false);
}
public void onNothingSelected(AdapterView<?> parent) {}
}
您使用微调器的活动应该有一个带有get和set方法的全局变量mOpen。这是因为即使在列表关闭后,ontouch侦听器也会保持打开状态。
如果您在微调器和选项之间或选项的侧面触摸,它将关闭。触摸微调器上方和选项下方仍然无法关闭它。
答案 2 :(得分: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
}
}