【发布时间】:2018-06-09 04:54:45
【问题描述】:
我有一个简单的RecyclerView,在那里我展示了来自firebase 的所有产品,但现在我想在Carousel 上展示它们,就像这样Library,问题是我的@ 上都有所有产品987654326@ 类,我想创建一个自定义的Adapter 将产品作为Carousel。
首先我得到的产品如下:
FirebaseRecyclerOptions< CardPOJO > options =
new FirebaseRecyclerOptions.Builder< CardPOJO >()
.setQuery(products_ref, CardPOJO.class)
.build();
我将它存储在options,然后我创建Adapter
FirebaseRecyclerAdapter adapter = new FirebaseRecyclerAdapter< CardPOJO, CardHolder>(options) {
@Override
public CardHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//inflate the single recycler view layout(item)
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_product, parent, false);
int width = parent.getMeasuredWidth() / 2;
width -= mContext.getResources().getDimensionPixelSize(R.dimen._8sdp);
final CardHolder cardViewHolder = new CardHolder(view,width);
return cardViewHolder;
}
@Override
public void onDataChanged() {
super.onDataChanged();
tv.setVisibility(getItemCount() == 0 ? View.VISIBLE : View.GONE);
}
@Override
protected void onBindViewHolder(CardHolder holder, int position, final CardPOJO model) {
holder.state.setText(model.getState());
holder.cardName.setText(model.getName());
switch (model.getState()){
case "free":
//Img free
break;
case "not_free":
//Img not free
break;
default:
break;
}
holder.view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(model.getState().equals("free")){
//stuff
}
else{
//stuff
}
root_ref.child("PurchasedProducts").child(currentuser).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//stuff
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
});
}
};
adapter.startListening();
products_recycler.setAdapter(adapter);
我的.xml 有一个像这样的RecyclerView:
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view_chooseCard"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
所以我的问题是,我该如何更改它以放置 Carousel 并像示例一样使用 in.goodiebag.carouselpicker.CarouselPicker 而不是 RecyclerView?
我也可以将所有这些代码移到另一个代码中以使其干净吗?
注意
当我尝试实现 CourouselPicker 时,它会这样说:
设置适配器 (android.support.v4.view.PagerAdapter) 在 CarouselPicker 中无法应用 到 (com.firebase.ui.database.FirebaseRecyclerAdapter)
到目前为止我尝试了什么?
我把RecyclerView改成了
<in.goodiebag.carouselpicker.CarouselPicker
android:id="@+id/carousel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginTop="20dp"
android:background="#CCC"
app:items_visible="three" />
我初始化了它:carouselPicker = (CarouselPicker) findViewById(R.id.carousel);
然后我尝试将.setAdapter() 与FireBaseAdapter 放在一起,但它们不兼容...
carouselPicker.setAdapter(adapter);
如果很难做到这一点,请阅读本文
如果那太宽泛了,而且用ViewPager 和那些东西来制作它太难了,是否可以创建一个像旋转木马一样的RecyclerView?您将物品水平放置,然后您看到中间的物品比其他物品大。
【问题讨论】:
-
为什么要投反对票?如果你对某人投反对票,你可以说出原因,这样 OP 就不会再这样做了;)
-
如果
carouselPicker.setAdapter(adapter);不起作用,那么最好只使用自定义适配器而不是 firebaserecycleradapter -
这就是我要的,如何创建不同的适配器而不是使用 firebaserecycleradapter
-
看到你的评论here。看起来@SUPERCILEX 的答案涵盖了所有内容(+1)。
-
@AL。感谢您来到这里,但是您知道获得这些物品的另一种方法吗?我的意思是,我使用
FirebaseAdapter很酷,但是就像现在一样,我想把这些项目放在 HorizontalScrollView 或 Carousel 上,我不能把它们放在 RecyclerView 或类似的东西上,你知道吗另一种方法呢?从现在开始,我有一个正常的列表,它可以正确显示数据,但现在我想把它放在一个更好的 UI 上,但我工作得很少,所以如果你知道另一种方法,可以随意放置答案:D
标签: android firebase firebase-realtime-database android-adapter firebaseui