Có lỗi lạ trong mã của tôi. Tôi sử dụng Recycler View (được sử dụng trong quá khứ mà không có bất kỳ vấn đề gì). Tôi tạo ra ArrayList thử nghiệm để hiển thị nó trong Recycler nhưng tôi nhận được hàng đầu tiên duy nhất trong RecyclerView và sau đó, ứng dụng dừng lại (không bị treo) như ArrayList đã kết thúc.Tại sao RecyclerView onBindViewHolder chỉ được gọi một lần?
Mã chính của tôi:
@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;
}
Adaptor:
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();
}
}
Chủ:
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() + "");
}
}
Tôi không biết điều đó có quan trọng hay không, nhưng tôi đang làm việc trên phiên bản beta 6 của Android Studio 2.0 – Slava
Có thể là một vấn đề xảy ra ngay lập tức. Bạn đã thử cài đặt sạch một bản dựng sạch với thư viện 23.2 chưa? – WarrenFaith
WarrenFaith, không phải như vậy chắc chắn những gì bạn có nghĩa là (Bạn đã thử một cài đặt sạch của một xây dựng sạch với thư viện 23,2?) Nhưng đây không phải là hơn =) Ngày thử nghiệm đơn giản của tôi RecyclerView nó làm việc như tôi đã nói trước đây, nhưng trên dự án của tôi nó có hiệu ứng cũ. Tôi nghĩ rằng tôi sẽ cố gắng gỡ cài đặt bản beta và thử tương tự trên bản phát hành ổn định của Android Studio. – Slava