Đây là nỗ lực đầu tiên của tôi trong việc liên kết dữ liệu với RecyclerView nhưng không phải là lần đầu tiên tôi sử dụng RecyclerView.RecyclerView và Data Binding không hoạt động
Vì một lý do nào đó, không có phương thức bộ điều hợp nào được gọi - thậm chí không getItemCount(). Nó có thể là một vấn đề ngu ngốc với RecyclerView của tôi và không có gì để làm với các ràng buộc dữ liệu ở tất cả, nhưng tôi không thể nhìn thấy bất cứ điều gì sai.
View rootview = inflater.inflate(R.layout.fragment_profile_first, container, false);
// Initialize recycler view
RecyclerView badgesRV = (RecyclerView) rootview.findViewById(R.id.badgesRV);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setOrientation(LinearLayoutManager.HORIZONTAL);
badgesRV.setLayoutManager(llm);
BadgeAdapter badgeAdapter = new BadgeAdapter(profileObject.badgesEntity.badges);
badgesRV.setAdapter(badgeAdapter);
Adaptor:
public class BadgeAdapter extends RecyclerView.Adapter<BadgeAdapter.BadgeBindingHolder>{
private static final int MAX_BADGES_TO_DISPLAY = 5;
private BadgeObject[] badges;
public BadgeAdapter(BadgeObject[] badges){
this.badges = badges;
}
@Override
public BadgeBindingHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.profile_badge_row, parent, false);
BadgeBindingHolder holder = new BadgeBindingHolder(v);
return holder;
}
@Override
public void onBindViewHolder(BadgeBindingHolder holder, int position) {
final BadgeObject badgeObject = badges[position];
holder.getBinding().setVariable(BR.badge, badgeObject);
holder.getBinding().executePendingBindings();
}
@Override
public int getItemCount() {
Log.d(TAG, "item count = " + Math.min(MAX_BADGES_TO_DISPLAY, badges.length));
return Math.min(MAX_BADGES_TO_DISPLAY, badges.length);
}
public class BadgeBindingHolder extends RecyclerView.ViewHolder{
private ViewDataBinding binding;
public BadgeBindingHolder(View rowView) {
super(rowView);
binding = DataBindingUtil.bind(rowView);
}
public ViewDataBinding getBinding() {
return binding;
}
}
}
profile_badge_row.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable name="badge" type="parseJsonEntities.requestObjects.BadgeObject"/>
</data>
<LinearLayout
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@{badge.badgeImage}"/>
</LinearLayout>
Tôi đã kiểm tra và có chắc chắn là dữ liệu đó. Tôi đã bỏ lỡ điều gì?
=====================
Cập nhật:
Từ những gì tôi có thể nói RecyclerView chỉ đơn giản là không làm việc bên trong một Binding dữ liệu bố trí. Tôi đã tạo bố cục riêng chỉ với RV của tôi và nó hoạt động hoàn hảo. Ngay sau khi tôi bao gồm nó với bố cục chính của tôi nó ngừng hoạt động.
Không chắc chắn đây có phải là lỗi hay tính năng hay không.
Vì vậy, tôi nghĩ rằng có lẽ nếu tôi làm cho nó một cái nhìn tùy chỉnh có thể nó sẽ làm việc và nó. Vấn đề của tôi là tôi không biết cách chuyển giá trị vào chế độ xem tùy chỉnh của mình.
Tôi đã xem here nhưng không thể hiểu chính xác ý của mình. Đây là mã của tôi trong chế độ xem tùy chỉnh.
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.profile_badges_layout, this, true);
ProfileBadgesLayoutBinding binding = ProfileBadgesLayoutBinding.inflate(inflater);
RecyclerView badgesRV = (RecyclerView) view.findViewById(R.id.badgesRV);
LinearLayoutManager llm = new LinearLayoutManager(context);
llm.setOrientation(LinearLayoutManager.HORIZONTAL);
badgesRV.setLayoutManager(llm);
BadgeAdapter badgeAdapter = new BadgeAdapter(null);
badgesRV.setAdapter(badgeAdapter);
Điều này cho biết thông báo rằng ProfileBadgesLayoutBinding không được tìm thấy.
nơi là xml mảnh của bạn của bạn ?? –
'RecyclerView' hoạt động hoàn hảo với' DataBinding', vì nhiều người khác đang sử dụng nó mà không có vấn đề gì. Bạn có thể đăng bố trí của bạn nơi 'RecyclerView' của bạn được đặt? Có thể một số hành vi kỳ lạ với các chế độ xem cuộn khác. – yennsarah
Ngoài ra, 'badge.badgeImage' là gì? Một 'Resource id', một' Drawable' ..? – yennsarah