启用按钮时,在对话框中旋转器和Edittext不为空时



在我的AlertDialog中,我有一个旋转器和一个诚意。如果

,我试图禁用对话的正按钮
  1. Spinner的选定项目是"选择货币"("选择货币"是我的数组中的第一个项目,并且Spinner设置为返回字符串货币名称为")或
  2. deDittext是空的。

在下面的代码中,如果在选择旋转器中的项目之前,我在deDittext中具有输入,则阳性按钮仍在禁用。我不知道如何使这两个合作。

任何帮助将不胜感激。谢谢。

private void openDialog(){
    LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
    View subView = inflater.inflate(R.layout.dialog_layout, null);
    final EditText subEditTextExchangeRate = subView.findViewById(R.id.textInputExchangeRate);
    final Spinner subSpinner = subView.findViewById(R.id.spinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.currency, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    subSpinner.setAdapter(adapter);
    subSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(parent.getItemAtPosition(position).equals("Select currency")){
                currencyName = "";
            }else {
                currencyName = parent.getItemAtPosition(position).toString();
            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(subView);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            exchangeRate = subEditTextExchangeRate.getText().toString();
            st2 = exchangeRate;
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });

    final AlertDialog alertDialog = builder.create();
    alertDialog.show();
    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
    subEditTextExchangeRate.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            String exchangeRateInput = subEditTextExchangeRate.getText().toString();
            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(!exchangeRateInput.isEmpty() && !currencyName.isEmpty()); 
        }//This is the logic that I am looking for but the method is watching only EditText
        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

请在下面的代码下仅使用一个更改,在subpinner.setoniTemSelectedListener中放置下方,也请在全球范围内声明AlertDialog。

alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(!exchangeRateInput.isEmpty() && !currencyName.isEmpty());

这是您的代码。

private void openDialog(){
    LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
    View subView = inflater.inflate(R.layout.dialog_layout, null);
    final EditText subEditTextExchangeRate = subView.findViewById(R.id.textInputExchangeRate);
    final Spinner subSpinner = subView.findViewById(R.id.spinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.currency, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    subSpinner.setAdapter(adapter);
    subSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
            if(parent.getItemAtPosition(position).equals("Select currency")){
                currencyName = "";
            }else {
                currencyName = parent.getItemAtPosition(position).toString();
            }
            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(!exchangeRateInput.isEmpty() && !currencyName.isEmpty()); 
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent) {
        }
    });
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setView(subView);
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            exchangeRate = subEditTextExchangeRate.getText().toString();
            st2 = exchangeRate;
        }
    });
    builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    });

    alertDialog = builder.create();
    alertDialog.show();
    alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
    subEditTextExchangeRate.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            String exchangeRateInput = subEditTextExchangeRate.getText().toString();
            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(!exchangeRateInput.isEmpty() && !currencyName.isEmpty()); 
        }//This is the logic that I am looking for but the method is watching only EditText
        @Override
        public void afterTextChanged(Editable s) {
        }
    });
}

您应该调用旋转器的启用/禁用逻辑Spinner.onItemSelected。到目前为止,您仅在EditText.onTextChanged中检查逻辑。

  1. SpinnerEditText上设置侦听器之前声明您的AlertDialog
  2. Spinner.onItemSelected中,将您的逻辑添加到启用或禁用按钮。
  3. EditText.onTextChanged中,将您的逻辑添加到启用或禁用按钮。

如果更改代码,

    Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
    button.setEnabled(false);
        subEditTextExchangeRate.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(s.length>0 && !TextUtils.isEmpty(currencyName )){
            button.setEnabled(true);
            // your logic
           }else{
            button.setEnabled(false);
            // your logic
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });

->这将完成您的工作。

相关内容

  • 没有找到相关文章

最新更新