我有一个应用程序,可以从Firebase下载数据并将其显示在RecyclerView中,并且工作正常。我想要做的是在某些条件适用时显示或隐藏XML中的输入元素。从Firebase下载“是”或“否”的条件。
这是可以的,但是只将TextView隐藏在RecyclerView列表的第一项中。我如何将其应用于所有列出的项目?我将添加代码和屏幕截图。
代码:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menus);
setUpRecyclerView();
}
private void setUpRecyclerView() {
// get menu type from MenuSelectListActivity
selectedMenu = getIntent().getStringExtra("myMenuSelected");
//get Firestore db and use selected menu for listing
FirebaseFirestore db = FirebaseFirestore.getInstance();
CollectionReference notebookRef = db.collection(selectedMenu);
FirestoreRecyclerOptions<NoteAdapter> options = new FirestoreRecyclerOptions.Builder<NoteAdapter>()
.setQuery(query, NoteAdapter.class)
.build();
adapter = new Note(options);
final RecyclerView recyclerView = findViewById(R.id.recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(adapter);
DocumentReference docRef = db.collection(“delivery status”).document(“****************”);
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
String myDeliveryStatus = document.getString("deliverystatus");
// if delivery status yes then allow the order to be made
if (myDeliveryStatus.equals("yes")) {
// show quantity input TextView
TextView text_quantity = (TextView) findViewById(R.id.text_view_quantity);
//Toggle
if (text_quantity.getVisibility() == View.INVISIBLE)
text_quantity.setVisibility(View.VISIBLE);
else
text_quantity.setVisibility(View.VISIBLE);
adapter.setOnItemClickListener(new Note.OnItemClickListener() {
@Override
public void onItemClick(DocumentSnapshot documentSnapshot, int position) {
String myTitle = ((TextView) recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.text_view_title)).getText().toString();
String myPrice = ((TextView) recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.text_view_price)).getText().toString();
String myNumberOrdered = ((TextView) recyclerView.findViewHolderForAdapterPosition(position).itemView.findViewById(R.id.text_view_quantity)).getText().toString();
***** do various calculations on the data downloaded from Firebase. Not relevant to this question so not included
}
// if no do nothing
else if (myDeliveryStatus.equals("no")) {
TextView text_quantity = (TextView) findViewById(R.id.text_view_quantity);
//Toggle to hide TextView
if (text_quantity.getVisibility() == View.VISIBLE)
text_quantity.setVisibility(View.INVISIBLE);
else
text_quantity.setVisibility(View.INVISIBLE);
}
} else {
// Log.d(TAG, "No such document");
}
} else {
// Log.d(TAG, "get failed with ", task.getException());
}
}
});
}
适配器代码:
public class NoteAdapter {
private String title;
private String description;
private double price;
private int priority;
private int quantity;
private String status;
public NoteAdapter() {
//empty constructor needed
}
public NoteAdapter(String title, String description, double price, int priority, int quantity) {
this.title = title;
this.description = description;
this.price = price;
this.priority = priority;
this.quantity = quantity;
this.status = status;
}
public String getTitle() {
return title;
}
public String getDescription() {
return description;
}
public double getPrice() {
return price;
}
public int getPriority() {
return priority;
}
public int getQuantity() {
return quantity;
}
public String getStatus() {
return status;
}
}
答案 0 :(得分:0)
首先,您在初始化Recyclerview
和Adapter
时犯了某种错误。您将其用作正义模型或类的适配器。
请查看此answer并根据此内容更改代码结构。然后,您应该在BindViewHolder
adapter = new FirestoreRecyclerAdapter<NoteAdapter, ProductViewHolder>(options) {
@Override
protected void onBindViewHolder(@NonNull holder productViewHolder, int position, @NonNull NoteAdapter productModel) {
//here you can check the Yes or No like this
if (poductModel.getStatus.equalsIgnoreCase("no")){
if (text_quantity.getVisibility() == View.VISIBLE)
text_quantity.setVisibility(View.INVISIBLE);
else
text_quantity.setVisibility(View.INVISIBLE);
}
}
@NonNull
@Override
public ProductViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_product, parent, false);
return new ProductViewHolder(view);
}
};