Я хочу закрыть прядильщик Android, как только я щелкнул за пределами Spinner. Возможно ли это?
Закрыть Spinner на клике за пределами Spinner
Ответ 1
Try
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) v.setVisibility(View.GONE);
}
Ответ 2
Мне повезло с этим, даже если он не работает полностью.
Адаптер spinner получает представление:
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;
}
Слушатель ontouch:
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 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) {}
}
Действие
Ваша деятельность с помощью счетчика должна иметь глобальную переменную mOpen с методами get и set. Это связано с тем, что прослушиватель ontouch имеет тенденцию оставаться включенным даже после закрытия списка.
Ограничения этого метода:
Он закрывается, если вы коснетесь между счетчиком и параметрами или в стороне от параметров. Прикосновение к счетчику и ниже параметров все равно не закроет его.
Ответ 3
Я хотел бы определить, когда отобразилось меню прядильщика, и уволено. После многих поисков было не так много хороших решений. Я смог выполнить это, выполнив следующие действия:
-
Создал собственный класс spinner и переопределяет следующий метод:
@Override public boolean performClick() { this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown return super.performClick(); }
-
В моей деятельности переопределите метод 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 }
}
Удачи!