2016-04-10 4 views
0

Когда я поставил счетчик внутри ScrollView я имею вопросAndroid Scrollveiw изменить положение (Прокрутка вниз) Когда Spinner Spinner Selected

После пользователь выбирает элемент из ScrollView, Scrollview прокрутки вниз

Выберите пункт фильеры:

spn_cat_one.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int innerPosition, long l) { 
      // ... 
      spn_cat_one.clearFocus(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 
      // Do Nothing 
     } 
    }); 

ScrollView OnTouchListener:

scr_purchase_holder.requestFocusFromTouch(); 
     scr_purchase_holder.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      if(spn_cat_one.hasFocus()){ 
       spn_cat_one.clearFocus(); 
      } 
      scr_purchase_holder.requestFocusFromTouch(); 
      return false; 
     } 
    }); 

И в XML, ScrollView имеет свойство:

android:descendantFocusability="afterDescendants" 

ответ

0

Я попробовал почти все комбинации параметров (android:focusable, android:focusableInTouchMode, android:descendantFocusability ...), но ни один из них не работает для меня.

Как только фокус находится на EditText, вид будет прокручиваться до него после изменения выбора счетчика. Моим решением было реализовать OnTouchListener моих прядильщиков, чтобы очистить фокус на EditText, и вот он:

Объявление вашего слушателя как поля.

private View.OnTouchListener spinnerTouchListener; 

Создайте его, прежде чем устанавливать слушателя на свои плечики.

private void initListeners() { 
//region spinnerTouchListener 
    spinnerTouchListener = new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_UP){ 
       View focused = getView().findFocus(); 
       if (focused instanceof EditText){ 
        focused.clearFocus(); 
       } 
      } 
      return false; 
     } 
    }; 
    //endregion 
} 

И установите его на каждый счетчик.

private void initSpinner() { 
    mySpinner.setOnTouchListener(spinnerTouchListener) 
    otherSpinner.setOnTouchListener(spinnerTouchListener) 
} 

Это сработало для меня.

Наслаждайтесь

Смежные вопросы