Прокрутка с двумя ListViews, пытаясь вместо этого заполнить LinearLayout - PullRequest
1 голос
/ 20 октября 2011

попал в засолку, пытаясь сжать два ListViews в одном действии. Это работает, используя два отдельных ListFragments, содержащихся в стандартном (вертикальном) LinearLayout.

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

К счастью, списки на самом деле содержат очень мало пунктов (по 5 в среднем каждый). Таким образом, теоретически я мог бы вместо этого заполнить пару контейнеров LinearLayouts. Проблема в том, что данные, отображаемые списками, поступают из курсора и являются динамическими. Хотя мне известны методы newView () и bindView () CursorAdapter, я не совсем понимаю, как подключить адаптер к контейнерам LinearLayout вместо ListViews. То есть откуда CursorAdapter знает, что он должен создать 5 элементов строки из 5 элементов, которые он находит в своем курсоре? Где я могу создать цикл, который перебирает элемент курсора и создает элементы в контейнере LinearLayout? И как мне обновить содержимое LinearLayout при изменении данных в курсоре? Все примеры, которые я нахожу, аккуратно оборачивают эти проблемы в ListView, предоставляемый ListActivity, но я не могу использовать ListViews!

Я в замешательстве!

Маню

РЕДАКТИРОВАТЬ: Вот XML-макет (Фрагмент) деятельности при следовании предложению breceivemail. Закомментирован оригинальный контейнер LinearLayout до предложения breceivemail. Следует также отметить, что все действия в свою очередь содержатся в TabHost, но я не знаю, имеет ли это какое-либо значение для рассматриваемой проблемы.

<?xml version="1.0" encoding="utf-8"?>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                    android:layout_width="fill_parent"
                    android:layout_height="fill_parent">

<LinearLayout android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content">
<!--              
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    android:orientation="vertical"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content">
-->

    <TextView android:id="@+id/title"
               android:textSize="36sp"
               android:layout_width="fill_parent"
               android:layout_height="wrap_content"
               android:text="@string/SelectPlayer"/>

    <TextView android:layout_width="fill_parent"
              android:layout_height="wrap_content" 
              android:text="@string/Playing"
              android:textSize="18sp"
              android:textStyle="bold"
              android:textColor="#000000"
              android:background="#999999"/>

    <fragment android:name="com.myDomain.myApp.PlayerListFragment"
              android:id="@+id/playing"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content" />

    <TextView android:layout_width="fill_parent"
              android:layout_height="wrap_content" 
              android:text="@string/Reserve"
              android:textSize="18sp"
              android:textStyle="bold"
              android:textColor="#000000"
              android:background="#999999"/>

    <fragment android:name="com.myDomain.myApp.PlayerListFragment"
              android:id="@+id/reserve"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content" />

</LinearLayout>      

</ScrollView>

1 Ответ

0 голосов
/ 20 октября 2011

Поместите свои listViews в вертикальную прокрутку.Вы можете иметь прокручиваемый listView внутри вертикальной прокрутки с помощью следующего трюка.используйте следующий код и наслаждайтесь!

    private int listViewTouchAction;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //...

        setListViewScrollable(myListView1);
        setListViewScrollable(myListView2);
    }

    private void setListViewScrollable(final ListView list) {
            list.setOnTouchListener(new OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    listViewTouchAction = event.getAction();
                    if (listViewTouchAction == MotionEvent.ACTION_MOVE)
                    {
                        list.scrollBy(0, 1);
                    }
                    return false;
                }
            });
            list.setOnScrollListener(new OnScrollListener() {
                @Override
                public void onScrollStateChanged(AbsListView view,
                        int scrollState) {
                }

                @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                if (listViewTouchAction == MotionEvent.ACTION_MOVE)
                {
                    list.scrollBy(0, -1);
                }
            }
        });
    }

listViewTouchAction - это глобальное целочисленное значение.

...