SwipeRefresh中的ScrollView中的Android RecyclerView不可见

时间:2015-09-01 07:40:35

标签: android android-scrollview android-recyclerview swiperefreshlayout

RecyclerView内的ScrollView位于SwipeRefresh布局内。我在RecyclerView之上的布局很少,但我的RecyclerView不可见,即使我从ScrollView删除了其他布局。你有什么建议?我需要以某种方式将列表放在ScrollView的某些布局下面。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <include layout="@layout/toolbar"></include>

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true">    
                ....
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/simpleList"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>

        </ScrollView>
    </android.support.v4.widget.SwipeRefreshLayout>

</LinearLayout>

试图给出特定的高度,但仍然看不到o.O

如果我用RecyclerView 替换 ListView,则列表可见。

3 个答案:

答案 0 :(得分:2)

如果您希望列表中的所有项目始终可见,请将RecyclerView替换为LinearLayout并将项目添加到其中。

一个例子:

<强> your_layout.xml

term

<强> list_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" 
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto">

        <include layout="@layout/toolbar"></include>

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipe_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true">

            <ScrollView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true">    
                    ....
                    <LinearLayout
                        android:id="@+id/simpleList"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical"/>

            </ScrollView>
        </android.support.v4.widget.SwipeRefreshLayout>

    </LinearLayout>

在您的Java代码中:

首先声明列表

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/item_text"/>

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/abc_ic_ab_back_mtrl_am_alpha"/>

</LinearLayout>

然后添加项目的方法

mSimpleList = (LinearLayout) findViewById(R.id.simpleList);

答案 1 :(得分:1)

我只需将android:fillViewport="true"放到SwipeRefreshLayout。现在RecyclerView可见。

答案 2 :(得分:0)

我之前的回答是阻止向下滚动。所以,一个好的解决方法是将你的Stuff添加为RecyclerView的第一个元素。这可以使用适配器轻松实现。这样你仍然可以滚动你的东西以及你的实际列表元素。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <include layout="@layout/toolbar"></include>

    <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

                  <android.support.v7.widget.RecyclerView
                    android:id="@+id/simpleList"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_alignParentBottom="true"
                    android:layout_below="@+id/your_stuff" />

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

</LinearLayout>

使用类似以下内容的适配器实现,

  public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    class YourStuffViewHolder extends RecyclerView.ViewHolder {
        //
    }

    class ViewHolderListItem extends RecyclerView.ViewHolder {
        //
    }

    @Override
    public int getItemViewType(int position) {

          if(position>0){
               return 1;
          }
          return 0;

    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
             case 0: return new YourStuffViewHolder();
             case 1: return new ViewHolderListItem ();
         }
    }
}