【问题标题】:RecyclerView to be Scrolled horizontally with the widthRecyclerView 与宽度水平滚动
【发布时间】:2016-07-25 19:28:46
【问题描述】:

我有更多的项目要在 recyclerView 内的 cardView 中水平显示,并且我有更多的卡片。

我试图将 cardView 放在 Horizo​​ntalScrollView 中,它可以滚动单独的卡片。我想滚动整个 RecyclerView 以滚动查看右端项目。

我尝试在 Horizo​​ntalScoolView 中使用 RecyclerView 无效。 NestedScrollView 中的 RecyclerView 不起作用。

RecyclerView 在一个片段中。 viewPager tabLayout里面,这是fragment之一

片段 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:orientation="vertical"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:orientation="horizontal">    
  <android.support.v7.widget.RecyclerView
    android:id="@+id/record_recycler"
    android:layout_width="550dp"
    android:scrollbars="horizontal"
    android:layout_height="0dp"
    android:layout_weight="1" />
</LinearLayout>

适配器:

public class TestAdapter extends RecyclerView.Adapter{
   private List<Model> items;
   Context context;
   public TestAdapter(Context con, List<Model> itemslist) {
      context=con;
      this.items = itemslist;
    }

@Override
public int getItemViewType(int position) {
    return items.get(position).getUnique();
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
   if(viewType==0)
    return new MyViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.cricketrank_record_valuecard, parent, false));
else
    return new MyViewHolder1(LayoutInflater.from(parent.getContext()).inflate(R.layout.cricketrank_record_titlecard, parent, false));

}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  if (holder instanceof MyViewHolder)
    try{
    ((MyViewHolder)holder).bindViewHolder(position);
    }catch (Exception e){
        Log.e(Constant.Tag,e.toString());
    }
else if(holder instanceof MyViewHolder1)
    try{
        ((MyViewHolder1)holder).bindViewHolder(position);
    }catch (Exception e){
        Log.e(Constant.Tag,e.toString());
    }
}

@Override
public int getItemCount() {
   return items.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder{
    public TextView text,text1,text2,text3,text4,text5;
    public View mCardView;

   public MyViewHolder(View view) {
    super(view);
    text1 = (TextView) view.findViewById(R.id.text1);
    text2 = (TextView) view.findViewById(R.id.text2);
    text3 = (TextView) view.findViewById(R.id.text3);
    text4 = (TextView) view.findViewById(R.id.text4);
  }

 public void bindViewHolder(int position) {

    text1.setText(items.get(position).getTeam());
    text2.setText(items.get(position).getRank());
    text3.setText(items.get(position).getMatches());
    text4.setText(items.get(position).getPoints());
 }
 }
}

public class MyViewHolder1 extends RecyclerView.ViewHolder{
    public TextView text,text1,text2,text3,text4,text5;
    public RelativeLayout rl;

   public MyViewHolder1(View view) {
    super(view);
    text = (TextView) view.findViewById(R.id.text);
    text1 = (TextView) view.findViewById(R.id.text1);
    text2 = (TextView) view.findViewById(R.id.text2);
    text3 = (TextView) view.findViewById(R.id.text3);
    text4 = (TextView) view.findViewById(R.id.text4);
    rl = (RelativeLayout) view.findViewById(R.id.rl);
   }

  public void bindViewHolder(int position) {
    text1.setText(items.get(position).getTeam());
    text2.setText(items.get(position).getRank());
    text3.setText(items.get(position).getMatches());
    text4.setText(items.get(position).getPoints());

   }
 }
}

主活动:

RecyclerView record_recycler= (RecyclerView) view.findViewById(R.id.record_recycler);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity());
record_recycler.setLayoutManager(mLayoutManager);
record_recycler.setItemAnimator(new DefaultItemAnimator());
TestAdapter adapter = new TestAdapter(getActivity(), list);
record_recycler.setAdapter(adapter);

【问题讨论】:

    标签: android android-recyclerview scrollview


    【解决方案1】:

    我认为您正试图在两个方向上滚动 recyclerview。垂直是 recylerview 的通常滚动,而水平是滚动视图,如果它不符合所提到的宽度。对吧?

    如果你正在尝试这个,那么我认为不可能像你想象的那样滚动。 您可以在两个方向滚动回收站视图,并使用不同的视图。

    正如你所说,cardview 的滚动是可能的,默认情况下它不会正常滚动。因此,如果用户看不到完整内容并且您将滚动视图设置为滚动,它将滚动以向用户完全显示卡片内容。

    可能的方法是,将视图与字段名称和值保持垂直。如果您想创建更多,请再添加一行以容纳向下的值。

    请看下面:

    <android.support.v7.widget.CardView
        android:id="@+id/card"
        android:layout_marginTop="2dp"
        android:layout_marginBottom="4dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
            <LinearLayout
                android:id="@+id/layout2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/layout1"
                android:orientation="horizontal">
                <TextView
                    android:text="One"
                    android:textSize="@dimen/font_itemsrow_13dp"
                    android:layout_weight=".11"
                    android:paddingLeft="3dp"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="Two"
                    android:textSize="@dimen/font_itemsrow_13dp"
                    android:layout_weight=".11"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="Three"
                    android:textSize="@dimen/font_itemsrow_13dp"
                    android:layout_weight=".24"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="Four"
                    android:textSize="@dimen/font_itemsrow_13dp"
                    android:layout_weight=".11"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="Five"
                    android:textSize="@dimen/font_itemsrow_13dp"
                    android:layout_weight=".17"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:text="Six"
                    android:textSize="@dimen/font_itemsrow_13dp"
                    android:layout_weight=".26"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
    
            </LinearLayout>
            <LinearLayout
                android:id="@+id/layout3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="@dimen/padding_3dp"
                android:layout_below="@+id/layout2"
                android:orientation="horizontal">
                <TextView
                    android:id="@+id/one"
                    android:textSize="@dimen/font_itemsrow_14dp"
                    android:textColor="@color/black"
                    android:layout_weight=".11"
                    android:paddingLeft="3dp"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:id="@+id/two"
                    android:textSize="@dimen/font_itemsrow_14dp"
                    android:textColor="@color/black"
                    android:layout_weight=".11"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:id="@+id/three"
                    android:textSize="@dimen/font_itemsrow_14dp"
                    android:textColor="@color/black"
                    android:layout_weight=".24"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:id="@+id/four"
                    android:textSize="@dimen/font_itemsrow_14dp"
                    android:textColor="@color/black"
                    android:layout_weight=".11"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:id="@+id/five
                    android:textSize="@dimen/font_itemsrow_14dp"
                    android:textColor="@color/black"
                    android:layout_weight=".17"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
                <TextView
                    android:id="@+id/six"
                    android:textSize="@dimen/font_itemsrow_14dp"
                    android:textColor="@color/black"
                    android:layout_weight=".26"
                    android:paddingRight="3dp"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content" />
            </LinearLayout>
            <LinearLayout
             ....// Add extra title Row
            </LinearLayout>
            <LinearLayout
             ....// Add extra Values Row
            </LinearLayout>
        </RelativeLayout>
    </android.support.v7.widget.CardView>
    

    【讨论】:

      【解决方案2】:

      您可以使用 LayoutManager refrence 归档它,使用 3 个参数,在您的情况下,稍微更改 MainActivity,它会如下所示:

      RecyclerView.LayoutManager mLayoutManager
      = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false);
      

      如文档所述,第二个参数定义方向:

      /**
       * @param context       Current context, will be used to access resources.
       * @param orientation   Layout orientation. Should be {@link #HORIZONTAL} or {@link
       *                      #VERTICAL}.
       * @param reverseLayout When set to true, layouts from end to start.
       */
      

      【讨论】:

      • 但是如果我们把它放在屏幕大小之后的右侧,它就不会滚动查看额外的东西。如果我滚动,这将显示下一个项目。但我想看到在屏幕尺寸之后扩展的相同项目视图值(比如水平滚动页面以查看不可见的内容)。谢谢@Mij
      猜你喜欢
      • 1970-01-01
      • 2014-03-16
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2018-10-01
      • 2012-07-13
      • 2013-07-06
      • 2012-04-05
      相关资源
      最近更新 更多