2016-02-25 4 views
5

Я создал приложение со страницей, которая должна динамически загружать контент из веб-службы. Я хочу иметь listview, который может прокручиваться вместе с линейным расположением внутри NestedScrollView. Но когда содержимое загружается в список, оно не поцарапается до полной высоты.Как я могу иметь ListView внутри NestedScrollView

Вот мой код.

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.myquestionth.myquestionth10.Profile2Activity" 
    tools:showIn="@layout/activity_profile2"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical"> 

      <ImageView 
       android:layout_width="match_parent" 
       android:layout_height="400dp" 
       android:background="#BBBBBB" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:text="Media heading" 
       android:id="@+id/textView2" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis." 
       android:id="@+id/textView8" /> 

     </LinearLayout> 

     <ListView 
      android:id="@+id/listView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="#70bcf5" /> 

    </LinearLayout> 

</android.support.v4.widget.NestedScrollView> 

У меня есть поиск по scrollview, который не может быть вложен. Это пример, который я хочу в соответствии с моим дизайном макета с страницы обзора игры Google. Какой метод они используют? Предложите мне, если я сделаю что-то неправильно. Большое спасибо.

enter image description here

Вот что я хочу.

enter image description here

+1

исправить высоту списка. Лучше всего использовать координатор и повторный просмотр.Refer [this] (http://inthecheesefactory.com/blog/android-design-support-library-codelab/en) –

ответ

4

Ну, я хотел бы предложить вам 2 способа решить эту проблему:

1) Попробуйте сделать LinearLayout заголовок вашего ListView. Обратите внимание, что заголовок должен быть завышен, так как он написан here.

2) Вы упомянули, что вы используете NestedScrollView, поэтому, возможно, вы должны также попытаться заменить ListView внутри вложенную ScrollView с LinearLayout, а мудрые люди предложили here, добавив просмотры строк в цикле аналогично тому, как ваш адаптер работает.

Удачи вам!

1

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

Да, вы можете.

Реализовать (внахлест) следующий метод на адаптере:

public class MyAdapter extends BaseAdapter { 
    // One view to Header 
    // One view to filter options ("most helpful first" and "Options") 
    // One view to comments 
    private final static int VIEW_HEADER = 0; 
    private final static int VIEW_OPTIONS = 1; 
    private final static int VIEW_COMMENTS = 2; 
    private final static int VIEW_TYPE_MAX = 3; 

    @Override 
    public int getViewTypeCount() { 
     // It will return 3 since I have 3 different types of VIEW 
     return VIEW_TYPE_MAX; 
    } 

    @Override 
    public int getItemViewType(int position) { 
     if (position == 0) 
      return VIEW_HEADER; 
     else if (position == 1) 
      return VIEW_OPTIONS; 
     else 
      return VIEW_COMMENTS; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      if(getItemViewType(position) == VIEW_HEADER) 
       // Inflate HEADER Layout 
      else if (getItemViewType(position) == VIEW_OPTIONS) 
       // Inflate Options Layout 
      else 
       // Inflate comments Layout 
     } 

     // Fill the view contents according to its type 
     .... 
     return convertView; 
    } 
} 

Android будет повторно использовать представление. Однако Android будет повторно использовать виды одного и того же типа.

+0

Спасибо Guiherme я попробую это. – Marcus

+0

Добро пожаловать. Попробуйте также ответить Алексу Пепперу ... кажется, проще, чтобы исходный ответчик оказался – W0rmH0le

3

на леденец года вы можете использовать

yourtListView.setNestedScrollingEnabled(true); 

Это включить или отключить вложенную прокруткой для этого вида если вам нужна обратная совместимость с более старой версией операционной системы вам придется использовать RecyclerView.

+0

[Кредит] (https://stackoverflow.com/a/35198484/4015799). –

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