2016-07-25 160 views
2

我有更多的項目在cardView中顯示在recyclerView的水平內部,並且我擁有更多的卡片。RecyclerView將被水平滾動,寬度爲

我試圖將cardView放置在Horizo​​ntalScrollView中,它用於滾動個人卡。我想滾動整個RecyclerView以滾動查看右端項目。

我嘗試使用Horizo​​ntalScroolView中的RecyclerView不起作用。 NestedScrollView內的RecyclerView不起作用。

RecyclerView在一個片段中。裏面的viewPager tabLayout,這是片段的一個

片段的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()); 

    } 
} 
} 

MainActivity:

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); 

回答

0

我認爲你正試圖滾動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> 
0

您可以通過佈局管理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. 
*/ 
+0

但它不會滾動查看多餘的東西,如果我們的屏幕尺寸後,有它在右側。這將顯示下一個項目,如果我滾動。但我希望看到在屏幕大小後擴展的相同項目視圖值(如水平滾動頁面以查看不可見內容)。謝謝@Mij – 12345