2017-02-17 2 views
-1

В основном я не мог прокручивать месяцы и годы в datepicker, потому что scrollview - это прокрутка.как прокрутить DatePicker, когда вы разместили его в scrollview

<DatePicker 
      android:layout_width="match_parent" 
      android:id="@+id/datePicker5" 
      android:layout_weight="3.61" 
      android:layout_height="match_parent" /> 

Что нужно добавить? спасибо

У меня также есть этот код кстати.

private void addPet(){ 
    LayoutInflater layoutInflaterAndroid = LayoutInflater.from(c); 
    View mView = layoutInflaterAndroid.inflate(R.layout.add_pet_dialog, null); 
    AlertDialog.Builder alertDialogBuilderUserInput = new AlertDialog.Builder(c); 
    alertDialogBuilderUserInput.setView(mView); 


    final EditText userInputDialogEditText = (EditText) mView.findViewById(R.id.pet_name); 
    final DatePicker date_picker = (DatePicker) mView.findViewById(R.id.datepick); 
    date_picker.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) 
     { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       // Disallow the touch request for parent scroll on touch of datepicker view 
       requestDisallowParentInterceptTouchEvent(v, true); 
      } 
      else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { 
       // Re-allows parent events 
       requestDisallowParentInterceptTouchEvent(v, false); 
      } 
      return false; 
     } 
    }); 



     alertDialogBuilderUserInput 
      .setCancelable(false) 
      .setPositiveButton("Send", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialogBox, int id) { 
        // ToDo get user input here 
       } 
      }) 

      .setNegativeButton("Cancel", 
        new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialogBox, int id) { 
          dialogBox.cancel(); 
         } 
        }); 

    AlertDialog alertDialogAndroid = alertDialogBuilderUserInput.create(); 
    alertDialogAndroid.show(); 


} 



private void requestDisallowParentInterceptTouchEvent(View v, Boolean disallowIntercept) { 
    while (v.getParent() != null && v.getParent() instanceof View) { 
     if (v.getParent() instanceof ScrollView) { 
      v.getParent().requestDisallowInterceptTouchEvent(disallowIntercept); 
     } 
     v = (View) v.getParent(); 
    } 
} 

Я не знаю, почему он все еще не работает.

ответ

1

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

date_picker.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     // Disallow the touch request for parent scroll on touch of datepicker view 
     requestDisallowParentInterceptTouchEvent(v, true); 
    } 
    else if (event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL) { 
    // Re-allows parent events 
    requestDisallowParentInterceptTouchEvent(v, false); 
    } 
    return false; 
    } 
    }); 


private void requestDisallowParentInterceptTouchEvent(View v, Boolean disallowIntercept) { 
    while (v.getParent() != null && v.getParent() instanceof View) { 
     if (v.getParent() instanceof ScrollView) { 
      v.getParent().requestDisallowInterceptTouchEvent(disallowIntercept); 
     } 
     v = (View) v.getParent(); 
    } 
} 
+0

все еще не работает. –

+0

@ Dr.DOOM Вы можете поделиться своим полным файлом xml? – Basanth

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