gpt4 book ai didi

java - 为什么 RecyclerView onBindViewHolder 只调用一次?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:25:39 26 4
gpt4 key购买 nike

我的代码中有一个奇怪的错误。我使用 Recycler View(过去使用没有任何问题)。我创建了测试 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;
}

适配器:

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'

而且效果很好。所以我想这不是我的错误 =)。如果您知道如何报告此错误,欢迎您这样做。

更新: 错误的是我没有为我的项目设置布局高度作为包装内容。由于我不理解旧版本的原因,这无关紧要,但在新版本上它只占据了我的整个屏幕,我没想过要将它滑下来。

关于java - 为什么 RecyclerView onBindViewHolder 只调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36032379/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com