AlertDialog не может получить доступ к просмотру диалога другим методом

#android

#Android

Вопрос:

Я все еще изучаю Android и пытаюсь выполнить действие, в котором есть alertdialog, моя проблема в том, как я могу получить доступ к представлению alertdialog вне метода диалога? (Я хочу, чтобы мой индикатор выполнения отображался в исчезнувший при вызове другого метода)

это код, есть 2 метода 1. OpenDialog (alertdialog) и 2. loadItem (для получения значения из базы данных Firestore), когда я хочу установить видимость индикатора выполнения alertdialog на пропавшую в loadItem() pbSearchItem.setVisibility(View.GONE); pbsearchditem становится красным / не может найти представление :

 public void openDialog(){
        LayoutInflater li = CreateReceiptActivity.this.getLayoutInflater();
        final View v = li.inflate(R.layout.alertdialog_create_receipt, null);
        final Builder builder = new Builder(CreateReceiptActivity.this);
        builder.setView(v);
        final CardView cvQtyPriceBox = v.findViewById(R.id.alertdialog_receipt_cv_qtyprice);
        final EditText addItemType = v.findViewById(R.id.alertdialog_receipt_type);
        addItemType.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
        final EditText addItemMerk = v.findViewById(R.id.alertdialog_receipt_merk);
        final ProgressBar pbSearchItem = v.findViewById(R.id.alertdialog_receipt_pb);
        final Button searchitemBtn = v.findViewById(R.id.alertdialog_receipt_btn_search_typemerk);
        addItemMerk.setFilters(new InputFilter[]{new InputFilter.AllCaps()});
        final EditText addItemQty = v.findViewById(R.id.alertdialog_receipt_qty);
        final EditText addItemPrice = v.findViewById(R.id.alertdialog_receipt_price);
        Button btnSubmit = v.findViewById(R.id.alertdialog_receipt_submit);
        final RecyclerView recyclerSearchedItem = v.findViewById(R.id.alertdialog_receipt_recycler);
        recyclerSearchedItem.setHasFixedSize(true);
        recyclerSearchedItem.setLayoutManager(new LinearLayoutManager(this));
        alertDialogAdapter = new ReceiptAlertDialogAdapter(this, receiptItemList);
        recyclerSearchedItem.setAdapter(alertDialogAdapter);
        addItemType.setText(qrResult);
        final AlertDialog alertDialog = builder.create();
        alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {

                Button btnScan = v.findViewById(R.id.alertdialog_receipt_scanqr);
                btnScan.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent i = new Intent(CreateReceiptActivity.this, QRScannerActivity.class);
                        startActivityForResult(i, QR_REQUEST_CODE);
                    }
                });
            }
        });
        alertDialog.show();
        searchitemBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                searchitemType = addItemType.getText().toString();
                searchitemMerk = addItemMerk.getText().toString();

                if (searchitemType.isEmpty()){
                    searchitemMerkfilter = db.collection("watchlist").whereEqualTo("merk",searchitemMerk).get();
                    pbSearchItem.setVisibility(View.VISIBLE);
                    loadItem();
                    alertDialog.show();
                    receiptItemList.clear();

                }
                else if(!searchitemType.isEmpty()) {
                    searchtypemerk = searchitemType   " - " searchitemMerk;
                    searchitemMerkfilter = db.collection("watchlist").whereEqualTo("type",searchtypemerk).get();
                    pbSearchItem.setVisibility(View.VISIBLE);
                    loadItem();
                    alertDialog.show();
                    receiptItemList.clear();

                }
            }
        });
        btnSubmit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                itemType = addItemType.getText().toString().trim();
                itemQty = addItemQty.getText().toString().trim();
                itemPrice = addItemPrice.getText().toString().trim();
                listReceiptItem = new ListReceiptItem(itemType, itemQty, itemPrice);
                receiptItemList.add(listReceiptItem);
                recyclerView.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                alertDialog.dismiss();
                qrResult = null;
                Toast.makeText(CreateReceiptActivity.this, "barang tertambah", Toast.LENGTH_SHORT).show();
            }
        });
    }

    private void loadItem() {
        searchitemMerkfilter
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        if (task.isSuccessful()) {
                            for (QueryDocumentSnapshot document : task.getResult()) {
                                Log.d(Tag.ITEM, document.getId()   "=>"   document.getData());

                                String id = document.getString("id");
                                String date = document.getString("date");
                                String type = document.getString("type");
                                String qty = document.getString("qty");
                                String price = document.getString("price");
                                listReceiptItem = new ListReceiptItem(type, qty, price);
                                receiptItemList.add(listReceiptItem);
                            }
                            pbSearchItem.setVisibility(View.GONE);
                        } else {
                            Log.w(Tag.ITEM, "error getting documents", task.getException());
                        }
                    }
                });
    }
  

Комментарии:

1. Почему бы не добавить pbSearchitem в качестве члена вашего класса?

2. ах да, я должен был сделать это как член моего класса

Ответ №1:

Вы можете использовать findViewById таким же образом в Activity, например,

 alertDialog.findViewById(R.id.pb_progress).setVisible(View.INVISIBLE);
  

Ответ №2:

вы можете сделать это

  View v = LayoutInflater.from(getApplicationContext()).inflate(R.layout.alertdialog_create_receipt, null);

 final Builder builder = new Builder(CreateReceiptActivity.this);
        builder.setView(v);