Как я могу получить свой список для прокрутки?
-
24-10-2019 - |
Вопрос
У меня довольно сложное наращивание представления, и в рамках этого у меня есть список Listearlayout в Scrollview (и гораздо больше компонентов, но они не имеют значения в этом вопросе).
Теперь, как и должно быть хорошо прокручивается в целом, но у ListView есть ограниченная высота, и когда элементы внутри него превосходят высоту, исчезновение моего экрана. Я пытался разместить ListView в свой собственный ScrollView, но это не работает. Когда я пытаюсь прокрутить ListView, выбран основной ScrollView, а мой экран прокручивает вместо ListView.
Мой вопрос может звучать легко, но я не смог это исправить ... возможно ли сделать прокручиваемые списки?
Соответствующий XML:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout android:id="@+id/GlobalLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView android:id="@+id/EndpointList"
android:choiceMode="multipleChoice"
android:layout_height="175dip"
android:layout_width="fill_parent" />
</LinearLayout>
</ScrollView>
Решение 2
На самом деле, способ, которым я настраивает, действительно работает ... размещение списка в линейном виде в ScrollView. Просто избегайте того, чтобы ListView - это прямой ребенок ScrollView, и он сработает просто отлично ...
Просто имейте в виду, что если в списке недостаточно элементов, чтобы заполнить его, так что он выходит из «экрана», что он не прокручивает (хотя вроде логически). Также обратите внимание, что, когда у вас достаточно элементов для прокрутки, вам необходимо продолжать нажимать на элемент в ListView, чтобы он прокрутил, и половина времени фокус придается глобальному Scrollview вместо ListView ... to Избегайте этого (в большинстве случаев), продолжайте нажимать на самый верхний или наибольший элемент, в зависимости от того, как вы хотите прокрутить. Это оптимизирует ваш шанс сосредоточиться на вашем списке.
Я сделал видео, что это возможно, загружаю его сейчас на YouTube ...
Видео http://www.youtube.com/watch?v=c53oig_3lky. Анкет Качество довольно плохое, но это доказывает мою точку зрения.
Просто для глобального обзора, я использовал ScrollView, чтобы иметь возможность прокрутить всю свою деятельность, LineArlayout для макета деятельности и ListView, чтобы сделать список ...
Другие советы
Вместо ListView с другими макетами внутри ScrollView Создайте один ListView с заголовком и нижним колонтитулом.
Добавьте представления, которые должны быть выше ListView в качестве заголовка:
addHeaderView(View v)
и это ниже как нижний колонтитул:
addFooterView(View v)
Поместите все то, что должно быть выше ListView в заголовок ListView и то же самое с нижним файлом.
LayoutInflater inflater = LayoutInflater.from(this);
mTop = inflater.inflate(R.layout.view_top, null);
mBottom = inflater.inflate(R.layout.view_bottom, null);
list.addHeaderView(mTop);
list.addFooterView(mBottom);
// add header and footer before setting adapter
list.setAdapter(mAdapter);
В результате вы получите один прокрученный вид.
Попробуйте этот код может помочь вам
ListView listView = ( ListView ) findViewById(R.id.lsvButton3);
listView.setOnTouchListener(new ListView.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}
// Handle ListView touch events.
v.onTouchEvent(event);
return true;
}
});
Я хотел бы просто отметить что -нибудь для видео
ListView работает один раз каждый X касается не потому, что вы помещали его в LineArlayout, а потому, что вы касаетесь разделителя ...
Затем в Scrollview будет рассмотрено, что в затрагиваемом вами месте нет детей, чтобы отправлять MotionEvent на ... так что оно называет Super.DispatchTouchEvent, который в этом случае является View.DispatchTouchView, следовательно, ListView.OntouchEvent.
Когда вы коснетесь строки, Scrollview, которая действительно является группой View, отправит отправку детям в вашем случае TextView и никогда не вызывает одну из просмотра, чтобы ListView не прокручивался.
Надеюсь, что мое объяснение было достаточно ясным, чтобы указать, почему он не работает.