为什么RecyclerView onBindViewHolder只调用一次?

在我的代码中有一个奇怪的错误。 我使用Recycler View(以前没有任何问题)。 我创build了testingArrayList在Recycler中显示它,但是我得到了RecyclerView中唯一的第一行,之后,应用程序停止(不崩溃)像ArrayList完成。

我的主要代码:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_all_tab, container, false); Activity activity = getActivity(); //TODO: For testing ONLY ArrayList<Order> orders = new ArrayList<>(); for(int i = 0; i < 10; i++) { orders.add(new Order(i, i, i)); } // Initialising Orders Recycler View. OrderAdapter orderAdapter = new OrderAdapter(activity, orders); RecyclerView recyclerViewOrders = (RecyclerView) view.findViewById(R.id.recylerViewAllDiners); recyclerViewOrders.setLayoutManager(new LinearLayoutManager(activity)); recyclerViewOrders.setAdapter(orderAdapter); return view; } 

适配器:

 package com.slavafleer.tipcalculator; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; /** * Order Adapter for Order Recycler View */ public class OrderAdapter extends RecyclerView.Adapter<OrderHolder> { private Context context; private ArrayList<Order> orders; public OrderAdapter(Context context, ArrayList<Order> orders) { this.context = context; this.orders = orders; } @Override public OrderHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = layoutInflater.inflate(R.layout.item_order, parent, false); return new OrderHolder(view); } // TODO: why it has been done just once ? @Override public void onBindViewHolder(OrderHolder holder, int position) { Order order = orders.get(position); holder.bindOrder(order); } @Override public int getItemCount() { return orders.size(); } } 

持有人:

 package com.slavafleer.tipcalculator; import android.support.v7.widget.RecyclerView; import android.view.View; import android.widget.TextView; /** * Order Holder for Order Recycler View */ public class OrderHolder extends RecyclerView.ViewHolder { private TextView textViewOrderId; private TextView textViewDinerId; private TextView textViewPrice; public OrderHolder(View itemView) { super(itemView); textViewOrderId = (TextView) itemView.findViewById(R.id.textViewOrderId); textViewDinerId = (TextView) itemView.findViewById(R.id.textViewDinerId); textViewPrice = (TextView) itemView.findViewById(R.id.textViewPrice); } // Bind Data Object to the Views. public void bindOrder(Order order) { textViewOrderId.setText(order.getOrderId() + ""); textViewDinerId.setText(order.getDinerId() + ""); textViewPrice.setText(order.getPrice() + ""); } } 

起初,Febi Mathew,谢谢你试图帮助我。

我发现如何解决它。

我在Gradle的原始线路是

 compile 'com.android.support:recyclerview-v7:23.2.0' 

在我为Recycler做了样品之后,它也是一样的,我尝试了一个较旧的版本

 compile 'com.android.support:recyclerview-v7:23.1.1' 

它完美的工作。 所以我想这不是我的错误=)。 如果您知道如何报告此错误,欢迎您这样做。

更新:什么是错的是我没有设置我的项目的布局高度作为包装内容。 由于我不了解旧版本,所以没有关系,但是新版本只需要我所有的屏幕,我不想把它拖下来。

我也遇到了同样的问题,因为错误的高度参数设置。

它应该是wrap_content ,但我设置了layout-height = match_parent。

所以第一个列表项将占用列表视图中的所有空间,所以它只显示一个列表项。

如果项目布局高度的最外层元素设置为“wrap_content”值,请检查它。 例:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout mlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" // Just like this! > <TextView android:id="@+id/item_title" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

你能试试吗?

 @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = layoutInflater.inflate(R.layout.item_order, parent, false); return new OrderHolder(view); } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { Order order = orders.get(position); OrderHolder orderHolder = (OrderHolder)holder; orderHolder.bindOrder(order); } 

我以前的提交Recyclerview支持版本:24.2.1

之后,我通过添加以下内容更新了build.gradle:

 > configurations.all { > resolutionStrategy.eachDependency { DependencyResolveDetails details -> > def requested = details.requested > if (requested.group == 'com.android.support') { > if (!requested.name.startsWith("multidex")) { > details.useVersion '25.3.0' > } > } > } } 

因此,除了“multidex”之外,所有支持版本都已升级到25.3.0。 这意味着recyclerview版本也升级了。

这是运行构build后的问题,我的recyclerview的onbindviewholder方法不被调用。

任何我如何find这个原因评论上面的代码和运行后,能够使用我的recyclerview

希望这可能对某人有用。

问候维诺德