在回收者视图中显示和隐藏TextView对象

时间:2019-02-11 13:40:12

标签: android android-recyclerview show-hide

我有一个应用程序,可以从Firebase下载数据并将其显示在RecyclerView中,并且工作正常。我想要做的是在某些条件适用时显示或隐藏XML中的输入元素。从Firebase下载“是”或“否”的条件。

这是可以的,但是只将TextView隐藏在RecyclerView列表的第一项中。我如何将其应用于所有列出的项目?我将添加代码和屏幕截图。

As you can see, the 'quantity' input field is hidden only on the first item display

代码:

    @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;
}

}

1 个答案:

答案 0 :(得分:0)

首先,您在初始化RecyclerviewAdapter时犯了某种错误。您将其用作正义模型或类的适配器。 请查看此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);
        }
    };
相关问题