Java 为什么RecyclerView onBindViewHolder只打了一次电话?

Java 为什么RecyclerView onBindViewHolder只打了一次电话?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我的代码中有一个奇怪的错误。我使用Recycler视图(过去使用时没有任何问题)。我创建了测试ArrayList以在Recycler中显示它,但我在RecyclerView中得到了唯一的第一行,之后,应用程序停止(而不是崩溃),就像ArrayList完成一样 我的主要代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle

我的代码中有一个奇怪的错误。我使用Recycler视图(过去使用时没有任何问题)。我创建了测试ArrayList以在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;
}
你能试试这个吗

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

首先,菲比·马修,谢谢你帮我做这件事

我找到了修复它的方法

我在格拉德尔的最初路线是

compile 'com.android.support:recyclerview-v7:23.2.0'
在我为回收商做了样品之后,它还是一样的,我试了一个旧版本

compile 'com.android.support:recyclerview-v7:23.1.1'
它工作得很好。所以我想这不是我的bug=)。如果您知道如何报告此错误,欢迎您这样做

更新:
问题是我没有将我的项目的布局高度设置为包裹内容。由于我不了解旧版本的原因,这并不重要,但在新版本中,它只占用了我所有的屏幕,我没有想到尝试将其向下滑动。

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

它应该是wrap\u content,但我设置了布局高度=match\u parent


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

如果项目布局高度的最外层元素未设置为“匹配父项”值,而是设置为“换行内容”或某个Ndp值,请检查它。例如:

<?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>

我以前的提交回收视图支持版本: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版本也升级了

问题是,在运行构建之后,不会调用My recyclerview onbindviewholder方法

任何我在评论上述代码并运行之后发现这一原因的方式,都可以使用我的recyclerview

希望这对某人有用

问候
Vinod

onBindViewHolder是@Override,因此我无法更改它的参数。将您的“extends RecyclerView.Adapter”替换为“extends RecyclerView.Adapter”,当OrderHolder从RecyclerView.ViewHolder扩展时,他为什么要替换它?在这种情况下没有必要这样做,我不知道这是否重要,但我正在开发Android Studio 2.0的beta 6版本,这可能是instant run的一个问题。你有没有试过用23.2库干净地安装一个干净的版本?WarrenFaith,不太确定你的意思(你有没有用23.2库干净地安装一个干净的版本?)。我想我会尝试卸载测试版,并在Android Studio的稳定版本上尝试同样的方法。我建议从emulator/device中删除你的应用程序,创建一个“build->clean”,然后再次尝试使用23.2.0库运行并安装它。即时运行功能只是“注入”新代码,似乎仍然存在一些问题,因此我想知道作为注入的代码是否已经有问题(我觉得很愚蠢=)问题在于我没有将项目的布局高度设置为包装内容。由于我不理解旧版本的原因,它并不重要,但在新版本中,它占据了我所有的屏幕,我不想尝试将其滑下。真的很愚蠢的情况,但我很高兴它是在过去。只是花了些时间重新安装studio=)。再次感谢您试图帮助我。这对我帮助很大。我一直在挖掘为什么onBindViewHolder只调用了第一项而不是所有项,即使我添加了日志。最后您的回答帮助了我。谢谢
<?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>
> 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'
   >             }
   >         }
   >     } }