使用 firebase 获取数据并将其传递给适配器
final int[] f = {0};
String passedArg = getIntent().getExtras().getString("collection");
assert passedArg != null;
collectionReference = FirebaseFirestore.getInstance().collection(passedArg);
cartAdapter = new CartAdapter(this);
recyclerView = findViewById(R.id.vertical_recyclerview);
searchView = (SearchView) findViewById(R.id.searchView);
db = FirebaseFirestore.getInstance();
// getData();
if (f[0] == 0) {
Query query1 = collectionReference.orderBy("productName");
FirestoreRecyclerOptions<horizontalProductModel> options = new FirestoreRecyclerOptions.Builder<horizontalProductModel>()
.setQuery(query1, horizontalProductModel.class)
.build();
adapter = new verticalProductScrollAdapter(options, this);
adapter.updateOptions(options);
adapter.startListening();
RecyclerView recyclerView = findViewById(R.id.vertical_recyclerview);
recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
recyclerView.setAdapter(adapter);
adapter.hasStableIds();
collectionReference
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : Objects.requireNonNull(task.getResult())) {
Log.d(TAG, document.getId() + " => " + document.getData());
}
} else {
Log.w(TAG, "Error getting documents.", task.getException());
}
}
});
adapter.notifyDataSetChanged();
}
final ProductViewModel productViewModel = new ViewModelProvider(this, new ProductViewModelFactory(getApplication())).get(ProductViewModel.class);
adapter.setOnItemClickListener(new verticalProductScrollAdapter.OnItemClickListener() {
@Override
public void onItemClick(DocumentSnapshot documentSnapshot, int position) {
Product product = documentSnapshot.toObject(Product.class);
assert product != null;
Log.d("inserted_in_cart", "" + product.getProductName());
product.setUserQuantity(1);
product.setUserPrice(product.getProductPrice());
productViewModel.insert(product);
}
@Override
public void onUpdateClick(DocumentSnapshot documentSnapshot, int count) {
Product product = documentSnapshot.toObject(Product.class);
product.setUserQuantity(count);
product.setUserPrice(count * product.getProductPrice());
productViewModel.updateQuantity(product.getProductName(), product.getUserQuantity(), product.getUserPrice());
cartAdapter.notifyDataSetChanged();
}
@Override
public void onDeleteClick(DocumentSnapshot documentSnapshot, int position) {
Product product = documentSnapshot.toObject(Product.class);
productViewModel.deleteQuantity(product.getProductName());
Log.d(TAG, "onDeleteClick: deleted");
cartAdapter.notifyDataSetChanged();
}
@Override
public void onSubscribeClick(DocumentSnapshot documentSnapshot, int position) {
Product product = documentSnapshot.toObject(Product.class);
//Doing some task );
}
});
//recyclerview
}
protected void onSaveInstanceState(Bundle state) {
super.onSaveInstanceState(state);
// Save list state
mListState = recyclerView.getLayoutManager().onSaveInstanceState();
state.putParcelable(LIST_STATE_KEY, mListState);
}
protected void onRestoreInstanceState(Bundle state) {
super.onRestoreInstanceState(state);
// Retrieve list state and list/item positions
if (state != null)
mListState = state.getParcelable(LIST_STATE_KEY);
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onDestroy() {
super.onDestroy();
adapter.stopListening();
}
@Override
protected void onResume() {
super.onResume();
if (mListState != null) {
recyclerView.getLayoutManager().onRestoreInstanceState(mListState);
}
}
}
这是适配器类的代码,在这里我必须保存回收视图的状态,例如单击按钮并设置产品数量,然后在重新启动应用程序后我想要相同的状态。那么需要处理哪些部分。
public class verticalProductScrollAdapter extends FirestoreRecyclerAdapter<horizontalProductModel, verticalProductScrollAdapter.ViewHolder> {
private static final String TAG = "verticalProductAdapter";
private OnItemClickListener listener;
private Context context;
List<Product> product;
public verticalProductScrollAdapter(@NonNull FirestoreRecyclerOptions<horizontalProductModel> options, Context context) {
super(options);
this.context = context;
product = new ArrayList<>();
}
@Override
protected void onBindViewHolder(@NonNull ViewHolder holder, int position, @NonNull horizontalProductModel model) {
holder.productName.setText(model.getProductName());
holder.productQuantity.setText(model.getProductQuantity());
holder.productPrice.setText(String.valueOf(model.getProductPrice()));
holder.setIsRecyclable(false);
try {
Glide.with(context)
.load(model.getProductImage())
// .centerCrop()
.into(holder.productImage);
} catch (Exception e) {
Log.e(TAG, "onBindViewHolder: " + e.getMessage());
}
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.vertical_scroll_item_layout, parent, false);
return new ViewHolder(v);
}
@Override
public void onError(@NonNull FirebaseFirestoreException e) {
Log.d(TAG, "onError: " + e.getMessage());
}
class ViewHolder extends RecyclerView.ViewHolder {
TextView productName, productPrice, productQuantity;
ImageView productImage;
Button addProduct, subscribe;
ElegantNumberButton updateProduct;
public ViewHolder(@NonNull View itemView) {
super(itemView);
productImage = itemView.findViewById(R.id.productImageVertical);
productName = itemView.findViewById(R.id.productNameVertical);
productPrice = itemView.findViewById(R.id.productPriceVertical);
productQuantity = itemView.findViewById(R.id.productQuantityVertical);
addProduct = itemView.findViewById(R.id.addProductVertical);
updateProduct = itemView.findViewById(R.id.updateProductVertical);
subscribe = itemView.findViewById(R.id.subscribe);
subscribe.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
listener.onSubscribeClick(getSnapshots().getSnapshot(position), position);
}
}
});
addProduct.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
addProduct.setVisibility(View.INVISIBLE);
updateProduct.setVisibility(View.VISIBLE);
updateProduct.setNumber("1");
listener.onItemClick(getSnapshots().getSnapshot(position), position);
}
}
});
updateProduct.setOnValueChangeListener(new ElegantNumberButton.OnValueChangeListener() {
@Override
public void onValueChange(ElegantNumberButton view, int oldValue, int newValue) {
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION && listener != null) {
int count = Integer.parseInt(updateProduct.getNumber());
Log.d(TAG, "onValueChange: " + count + "pos" + position);
if (count == 0) {
updateProduct.setVisibility(View.INVISIBLE);
addProduct.setVisibility(View.VISIBLE);
listener.onDeleteClick(getSnapshots().getSnapshot(position), position);
} else
listener.onUpdateClick(getSnapshots().getSnapshot(position), count);
}
}
});
}
}
public interface OnItemClickListener {
void onItemClick(DocumentSnapshot documentSnapshot, int position);
void onUpdateClick(DocumentSnapshot documentSnapshot, int count);
void onDeleteClick(DocumentSnapshot documentSnapshot, int position);
void onSubscribeClick(DocumentSnapshot documentSnapshot, int position);
}
public void setOnItemClickListener(verticalProductScrollAdapter.OnItemClickListener listener) {
this.listener = listener;
}
}
提前致谢。 您可以在 http://dailyb.ml
查看应用以供参考