Почему ListView нельзя использовать в ScrollView? - PullRequest
0 голосов
/ 08 января 2012

Я нашел много учебников и примеров, но почему ListView нельзя использовать в ScrollView?

Только ответы Использование ListView, чтобы он не прокручивался, чрезвычайно дорого и противоречит всей цели ListView. ресурсы .

IУ меня есть следующий XML-файл.

.........
<ScrollView 
   android:id="@+id/sv" 
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:layout_below="@+id/textView2">
      <ListView 
         android:id="@+id/list"
         android:layout_width="275dp"
         android:layout_height="200dp">
     </ListView>
</ScrollView>
.........

В этом XML-файле я уже использую

wrap_content вместо 200dp высоты списка

   ListView lv = (ListView) findViewById(R.id.list);
   lv.setAdapter(new EfficientAdapter(this));

но не работает.

Что такое альтернативный элемент списка прокрутки для определенного роста и веса.

Но я попробовал это:

<ListView 
         android:id="@+id/list"
         android:layout_width="275dp"
         android:layout_height="200dp">
     </ListView>

или

<ScrollView android:layout_width="fill_parent" android:id="@+id/sv" 
        android:layout_height="wrap_content"   android:layout_below="@+id/textView2">   
    <LinearLayout android:layout_width="fill_parent"
        android:orientation="vertical"
        android:layout_height="wrap_content">
        <ListView android:id="@+id/list" android:layout_width="275dp"
            android:layout_height="240dp"></ListView>
    </LinearLayout>
    </ScrollView>

Без прокрутки, но с прокруткой списка, все в порядке, но не совсем гладко.Я попытался это , но не смог получить больше идеи за этим.

Отредактировано:

Правильно ли Listview имеет встроенные возможности прокрутки.Так что нет необходимости определять просмотр списка внутри прокрутки.Это означает, что скроллвью не нужно?

Ответы [ 6 ]

4 голосов
/ 08 января 2012

Проблема не в ListView, а в ScrollView

Эти два вида должны контролировать вертикальную прокрутку, если у вас есть вид прокрутки и вид списка в одной и той же компоновке и пользователь прокручивает вниз, какое из них должно быть сфокусировано и прокрутка?

Это распространенная проблема, которая имеет общее и простое решение (это решение разработано Romain Guy из команды Google Android!): не используйте просмотр списка в виде прокрутки!

Если вам нужно интересное видео / разговор, вы можете посмотреть его в Google I / O Talks: Мир ListView Я действительно предлагаю вам взглянуть:)

0 голосов
/ 03 июля 2013

Я проверил ниже XML и это работает. Но все еще пытаюсь обработать функцию onTouchEvent между ScrollView и ListView. Вы можете нажать здесь , чтобы увидеть оригинальное решение.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:quilt="http://schemas.android.com/apk/res-auto"
    android:id="@+id/scrollview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <ListView
            android:id="@+id/inner_listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>

</ScrollView>
0 голосов
/ 04 февраля 2013

EDIT: Да, android doc говорит, что не используйте listview в scrollview, потому что оба имеют одинаковый жест касания по вертикали. Это создаст проблемы во время прокрутки элемента. А также проблема с их размером адаптера, поэтому мы не можем увидеть весь элемент.

Наконец-то у меня есть лучшее решение, и я хочу поделиться им со всеми. Пожалуйста, не используйте Listview в Scrollview вместо него, используйте LinearLayout и привязывайте свой элемент, используя View Infaltor.

    <LinearLayout
        android:id="@+id/linear_scroll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/linear_listview"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:text="@string/bottom_item"
            android:layout_gravity="center"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:layout_marginTop="5dp"
            android:text="@string/androidhub4you" />
    </LinearLayout>
</ScrollView>

И в вашем классе Java-

 for (int i = 0; i < mArrayListData.size(); i++) {
                     /**
                      * inflate items/ add items in linear layout instead of listview
                      */
                     LayoutInflater inflater = null;
                     inflater = (LayoutInflater) getApplicationContext()
                                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                     View mLinearView = inflater.inflate(R.layout.row, null);
                     /**
                      * getting id of row.xml
                      */
                     TextView mFirstName = (TextView) mLinearView
                                  .findViewById(R.id.textViewName);
                     TextView mLastName = (TextView) mLinearView
                                  .findViewById(R.id.textViewLastName);

                     /**
                      * set item into row
                      */
                     final String fName = mArrayListData.get(i).getmFirstName();
                     final String lName = mArrayListData.get(i).getmLastName();
                     mFirstName.setText(fName);
                     mLastName.setText(lName);

                     /**
                      * add view in top linear
                      */

                     mLinearListView.addView(mLinearView);

                     /**
                      * get item row on click
                      *
                      */
                     mLinearView.setOnClickListener(new OnClickListener() {

                           @Override
                           public void onClick(View v) {
                                  // TODO Auto-generated method stub
                                  Toast.makeText(MainActivity.this, "Clicked item;" + fName,
                                                Toast.LENGTH_SHORT).show();
                           }
                     });
              }

Read more: http://www.androidhub4you.com/2014/03/android-listview-into-scrollview-issue.html#ixzz2xc7Ag74u
0 голосов
/ 08 января 2012

ListViews не должны попадать в ScrollView. Даже если вы взломаете, и я имею в виду большой взлом, оба представления расширяют их и заставляют их прокручиваться, также можно нажимать на предметы и т. Д. И т. Д., В конце концов что-то сломается. Также не добавляйте ListView в Scroll Просмотр.

0 голосов
/ 08 января 2012

ListView имеет встроенные возможности для прокрутки. Вам не нужно определять его снова в ScrollView

0 голосов
/ 08 января 2012

Это потому, что оба вида прокручиваются. Вы уже пытались найти / Google для этого? Есть тысячи матчей ..

http://www.google.de/search?sourceid=chrome&ie=UTF-8&q=android+listview+in+scrollview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...