我需要在我的Android应用程序中实现一个水平列表视图。我做了一些研究,遇到了如何在Android中创建一个水平的ListView ?和横向列表视图在Android?然而,这些问题是在Recyclerview发布之前提出的。有没有更好的方法来实现这个现在与Recyclerview?


当前回答

如果你想使用RecyclerView和GridLayoutManager,这是实现水平滚动的方法。

recyclerView.setLayoutManager(
new GridLayoutManager(recyclerView.getContext(), rows, GridLayoutManager.HORIZONTAL, false));

其他回答

您可以在代码或布局xml文件中更改方向。

在xml文件中

在你的布局xml文件中,将orientation设置为水平,layoutManager设置为LinearLayoutManager, GridLayoutManager, StaggeredGridLayoutManager之一。根据您的要求选择。

<androidx.recyclerview.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />

在代码中

如果希望以编程方式更改方向,请将layoutManager设置为水平方向。

recyclerView.layoutManager = LinearLayoutManager(context, RecyclerView.HORIZONTAL, false)

水平动态回收视图。

回收器视图实现

RecyclerView musicList = findViewById(R.id.MusicList);

// RecyclerView musiclist = findViewById(R.id.MusicList1);
// RecyclerView musicLIST = findViewById(R.id.MusicList2);
LinearLayoutManager layoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
musicList.setLayoutManager(layoutManager);

String[] names = {"RAP", "CH SHB", "Faheem", "Anum", "Shoaib", "Laiba", "Zoki", "Komal", "Sultan","Mansoob Gull"};
musicList.setAdapter(new ProgrammingAdapter(names));'

回收器视图的适配器类,其中有一个视图持有者用于持有该回收器的视图

public class ProgrammingAdapter 
     extendsRecyclerView.Adapter<ProgrammingAdapter.programmingViewHolder> {

private String[] data;

public ProgrammingAdapter(String[] data)
{
    this.data = data;
}

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

    return new programmingViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull programmingViewHolder holder, int position) {
    String title = data[position];
    holder.textV.setText(title);
}

@Override
public int getItemCount() {
    return data.length;
}

public class programmingViewHolder extends RecyclerView.ViewHolder{
    ImageView img;
    TextView textV;
    public programmingViewHolder(View itemView) {
        super(itemView);
        img =  itemView.findViewById(R.id.img);
        textV =  itemView.findViewById(R.id.textt);
    }
}

有没有更好的方法来实现这个现在与RecyclerView现在?

Yes.

当您使用RecyclerView时,您需要指定一个LayoutManager,该LayoutManager负责布局视图中的每个项。LinearLayoutManager允许你指定一个方向,就像一个正常的LinearLayout一样。

要用RecyclerView创建一个水平列表,你可以这样做:

LinearLayoutManager layoutManager
    = new LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false);

RecyclerView myList = (RecyclerView) findViewById(R.id.my_recycler_view);
myList.setLayoutManager(layoutManager);

随着RecyclerView库的发布,现在您可以轻松地对齐与文本绑定的图像列表。您可以使用LinearLayoutManager来指定您想要定位列表的方向,可以是垂直的,也可以是水平的,如下所示。

你可以从这篇文章中下载一个完整的工作演示。

水平方向和垂直方向都适用。

RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test_recycler);
    recyclerView = (RecyclerView)findViewById(R.id.recyclerViewId);

    RecyclAdapter adapter = new RecyclAdapter();

    //Vertical RecyclerView
    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(mLayoutManager);

    //Horizontal RecyclerView
    //recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(),LinearLayoutManager.HORIZONTAL,false));

    recyclerView.setAdapter(adapter);

}