Закрыть Spinner при нажатии вне Spinner - PullRequest
13 голосов
/ 14 сентября 2011

Я хочу закрыть спиннер Android, как только щелкну за пределами Spinner. Это вообще возможно?

Ответы [ 3 ]

1 голос
/ 21 февраля 2012

Мне повезло с этим, даже если оно не работает полностью.

Вид получения адаптера счетчика:

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) {}
}

Активность

Ваша деятельность с вращателем должна иметь глобальную переменную mOpen с методами get и set. Это связано с тем, что слушатель касания, как правило, остается включенным даже после закрытия списка.

Ограничения этого метода:

Он закрывается, если вы нажмете между счетчиком и опциями или сбоку от опций. Прикосновение к спиннеру и под опциями все равно не закроет его.

1 голос
/ 19 октября 2011

Попробуйте

@Override
public void onFocusChange(View v, boolean hasFocus) {

if (!hasFocus) v.setVisibility(View.GONE);

}
0 голосов
/ 21 октября 2013

Я хотел иметь возможность определить, когда меню счетчика отображалось, а также отклонялось. После долгих поисков не было много хороших решений. Я смог сделать это, выполнив следующее:

  1. Создан пользовательский класс счетчика и переопределите следующий метод:

    @Override
    public boolean performClick() {
    this.isDropDownMenuShown = true; //Flag to indicate the spinner menu is shown
        return super.performClick();
    }
    
  2. В моей Деятельности переопределите метод onWindowFocusChanged (логическое значение 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
    }
    

    }

Удачи!

...