2016-06-09 238 views
22

我做了一個水平的RecyclerView,它工作正常(感謝this),但滾動和數據的方向從左到右擴展;那麼如何更改RecyclerView滾動方向,如下圖所示?Android水平RecyclerView滾動方向

enter image description here

我的代碼:

StaggeredGridLayoutManager staggeredGridLayoutManager = 
       new StaggeredGridLayoutManager(
         2, //The number of Columns in the grid 
         LinearLayoutManager.HORIZONTAL); 

回答

46

假設你在RecyclerView使用LinearLayoutManager,那麼你可以傳遞true作爲LinearLayoutManager構造第三個參數。

例如:

mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, true)); 

如果您使用的是StaggeredGridLayoutManager,那麼你可以使用setReverseLayout方法提供。

+0

是的,根據在構造函數中傳遞的標誌,滾動將會改變。 非常感謝! – GvSharma

18

你可以用xml來實現。

該應用程序:reverseLayout =「true」做這項工作!

<android.support.v7.widget.RecyclerView 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content" 
         android:divider="@null" 
         android:orientation="horizontal" 
         app:reverseLayout="true" 
         app:layoutManager="android.support.v7.widget.LinearLayoutManager" /> 
+0

謝謝;但XML不會在我的情況下工作,因爲這在我的代碼: StaggeredGridLayoutManager staggeredGridLayoutManager = 新StaggeredGridLayoutManager( 2,//列的網格 LinearLayoutManager.HORIZONTAL數); –

2

水平RecyclerView用的ImageView和TextView的

xml文件

main.xml中

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="5dp" 
    android:orientation="vertical" 
    android:background="#070e94"> 
<View 
    android:background="#787878" 
    android:layout_width="match_parent" 
    android:layout_height="1dp" 
    /> 
<android.support.v7.widget.RecyclerView 
    android:id="@+id/wallet" 
    android:background="#070e94" 
    android:layout_width="match_parent" 
    android:layout_height="100dp"/> 

item.xml

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="100dp" 
android:layout_height="match_parent" 
android:layout_marginTop="5dp"> 
<ImageView 
    android:id="@+id/image" 
    android:layout_width="50dp" 
    android:layout_height="50dp" 
    android:scaleType="fitXY" 
    android:src="@drawable/bus" 
    android:layout_gravity="center"/> 
<TextView 
    android:textColor="#000" 
    android:textSize="12sp" 
    android:layout_gravity="center" 
    android:padding="5dp" 
    android:id="@+id/txtView" 
    android:textAlignment="center" 
    android:hint="Electronics" 
    android:layout_width="80dp" 
    android:layout_height="wrap_content" /> 

的Java類

ActivityMaim.java

public class MainActivity extends AppCompatActivity{ 
private RecyclerView horizontal_recycler_view; 
private ArrayList<Arraylist> horizontalList; 
private CustomAdapter horizontalAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    horizontal_recycler_view= (RecyclerView) findViewById(R.id.horizontal_recycler_view); 
    horizontalList = new ArrayList<Arraylist>(); 
    for (int i = 0; i < MyData.nameArray.length; i++) { 
     horizontalList.add(new Arraylist(
       MyData.nameArray[i], 
       MyData.drawableArray[i] 
     )); 
    } 
    horizontalAdapter=new CustomAdapter(horizontalList); 
    LinearLayoutManager horizontalLayoutManagaer 
      = new LinearLayoutManager(MainActivity.this, LinearLayoutManager.HORIZONTAL, false); 
    horizontal_recycler_view.setLayoutManager(horizontalLayoutManagaer); 
    horizontal_recycler_view.setAdapter(horizontalAdapter); 
}} 

Adaper類

CustomAdapter.java

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> { 

private ArrayList<Arraylist> dataSet; 

public static class MyViewHolder extends RecyclerView.ViewHolder { 

    TextView textViewName; 

    ImageView imageViewIcon; 

    public MyViewHolder(View itemView) { 
     super(itemView); 
     this.textViewName = (TextView) itemView.findViewById(R.id.txtView); 
     //this.textViewVersion = (TextView) itemView.findViewById(R.id.textViewVersion); 
     this.imageViewIcon = (ImageView) itemView.findViewById(R.id.image); 
     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) 
      { 
       if (getPosition()==0) 
       { 
        Toast.makeText(v.getContext(), " On CLick one", Toast.LENGTH_SHORT).show(); 

       } if (getPosition()==1) 
       { 
        Toast.makeText(v.getContext(), " On CLick Two", Toast.LENGTH_SHORT).show(); 

       } if (getPosition()==2) 
       { 
        Toast.makeText(v.getContext(), " On CLick Three", Toast.LENGTH_SHORT).show(); 

       } if (getPosition()==3) 
       { 
        Toast.makeText(v.getContext(), " On CLick Fore", Toast.LENGTH_SHORT).show(); 

       } 

      } 
     }); 
    } 
} 

public CustomAdapter(ArrayList<Arraylist> data) { 
    this.dataSet = data; 
} 

@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, 
             int viewType) { 
    View view = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.card_view, parent, false); 

    //view.setOnClickListener(MainActivity.myOnClickListener); 

    MyViewHolder myViewHolder = new MyViewHolder(view); 
    return myViewHolder; 
} 

@Override 
public void onBindViewHolder(final MyViewHolder holder, final int listPosition) { 

    TextView textViewName = holder.textViewName; 
    // TextView textViewVersion = holder.textViewVersion; 
    ImageView imageView = holder.imageViewIcon; 

    textViewName.setText(dataSet.get(listPosition).getName()); 
    //textViewVersion.setText(dataSet.get(listPosition).getVersion()); 
    imageView.setImageResource(dataSet.get(listPosition).getImage()); 
} 

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

Arraylist.java

public class Arraylist{ 
String name; 
int image; 

public Arraylist(String name, int image) { 
    this.name = name; 
    this.image=image; 
} 
public String getName() { 
    return name; 
} 
public int getImage() { 
    return image; 
}} 

MyData.java

public class MyData { 
static String[] nameArray = {"Gas", "Insurance", "Electronics", "Other Services"}; 
static Integer[] drawableArray = {R.drawable.gas_gas, R.drawable.insurance, R.drawable.electric, R.drawable.services};} 
0

試試這個

我已經嘗試了所有這些答案,它顯示了我同樣的垂直回收觀點,所以我試圖另一個例子。

  1. 初始化適配

    private Adapter mAdapter; 
    
  2. 適配器設置這樣

    mAdapter = new Adapter(); 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); 
    recycler_view.setLayoutManager(linearLayoutManager); 
    recycler_view.setAdapter(mAdapter); 
    

希望這也會爲你 工作完整代碼請參閱this鏈接

0

嘗試這種在片段

的layoutManager =新LinearLayoutManager(getActivity(),LinearLayoutManager.HORIZONTAL,FALSE);