2015-05-11 3 views
2

Я потратил большую часть дня на просмотр прокручиваемого контента на Android. Тем не менее, в моем приложении мне нужно применить настраиваемый тип прокрутки, содержащий среди прочего список. Listview имеет свою собственную прокрутку, и scrollview никогда не следует использовать вместе со списком.Создайте прокручиваемое LinearLayout без ScrollView

Но для просмотра необходимо иметь встроенные функции прокрутки. Документация на View указывает на поддержку, но предоставленные методы, похоже, не обеспечивают прослушивателей для обнаружения прокрутки.

Скроллвью также построен на FrameLayout, что также будет проблематично в моем приложении.

Вы можете сделать LinearLayout прокручивать с:

android:isScrollContainer="true" 

, но это, кажется, не делать ничего.

На самом деле вы даже можете установить на прокручивание для LinearLayout:

android:scrollbars="vertical" 

но также, кажется, не делать ничего.

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

ответ

1

На пути для решения указанных выше проблем, чтобы иметь 2 ScrollView, один наружный ScrollView, которые содержат весь вид и другую внутреннюю Scrollview вместо того, чтобы ListView и добавлять элементы внутри LinearLayout динамически (Внутри внутренней ScrollView)

+0

Вы никогда не должны размещать ListView внутри ScrollView. – AndroidDev

+0

Да, я знаю, поэтому я ссылаюсь на добавление элементов в линейный макет динамически внутри scrollView вместо ListView. Пожалуйста, внимательно прочитайте приведенное выше заявление. –

+0

Мне все еще нужно listview. Я разрабатываю настраиваемый элемент управления, который могут использовать другие, и он может использовать его со своим существующим ListView. – AndroidDev

0

Здесь это то, что кажется жизнеспособным решением, которое я тестировал, но не полностью. Создание пользовательского элемента управления, который расширяет LinearLayout, а затем переопределить dispatchTouchEvent:

@Override 
    public boolean dispatchTouchEvent(MotionEvent event) 
    { 
    MotionEvent vtev = MotionEvent.obtain(event); 

    final int actionMasked = event.getActionMasked(); 

    float x = event.getRawX(); 
    float y = event.getRawY(); 

    switch (actionMasked) 
    { 
     case MotionEvent.ACTION_DOWN: 

     break; 
     case MotionEvent.ACTION_MOVE: 
     int z = 0; 
     z++; 
     break; 
     case MotionEvent.ACTION_UP: 
     break; 
     case MotionEvent.ACTION_CANCEL: 

     break; 
     case MotionEvent.ACTION_POINTER_DOWN: 
     { 
     final int index = event.getActionIndex(); 

     break; 
     } 
     case MotionEvent.ACTION_POINTER_UP: 

     break; 
    } 

    boolean ret = super.dispatchTouchEvent(event); 
    return ret; 
    } 
} 

Вы можете разместить дочерние элементы внутри этого пользовательского LinearLayout и обнаружения событий движения, даже когда ListViews и ScrollViews присутствуют. Это не противоречит их собственной прокрутке.

0

На самом деле после того, как делают некоторые исследования, я пришел с решением этой проблемы:

Сначала я хочу объяснить проблему в очень простом способе.

1.LinearLayout будет прокручиваться.
2.Чтобы сделать это, мы можем использовать ScrollView, но иногда нам нужно использовать ListView внутри LinearLayout.
3.Мы знаем, что внутри ScrollView мы не можем использовать другое прокрутки, например ListView

Как это решить?

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

1.Create Layout header.xml и footer.xml и list.xml
2.Найдите ссылку ListView из list.xml в основном действии и динамически добавьте верхний и нижний колонтитулы в ссылку ListView.

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