【问题标题】:Go to another activity when all fields are not empty当所有字段不为空时转到另一个活动
【发布时间】:2016-03-21 13:30:21
【问题描述】:

我有 1 个活动3 个片段在此活动中。

在3个片段中,当检查复选框时,我有booleans返回true,或者edittext不为空。

当editTexts不为空并且我的复选框被选中时,我想无法按钮..

当我在方法 EditTextCompleted() 中添加了类似 sexMan.isChecked() 的内容时 我的应用崩溃了....

那么我怎样才能将这些条件连接到一个地方呢?

复选框监听器

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    if (isChecked){
        mSendInfoFromBmrFragment.sexChecked(true);
        switch (buttonView.getId()){

            case R.id.sexMan:
                mSendInfoFromBmrFragment.sex(BmrCalculation.SEX_MAN);
                sexMan.setChecked(true);
                sexWoman.setChecked(false);
                break;

            case R.id.sexWoman:
                sexMan.setChecked(false);
                sexWoman.setChecked(true);
                mSendInfoFromBmrFragment.sex(BmrCalculation.SEX_WOMAN);
                break;

编辑文本监听器

@覆盖 public void afterTextChanged(Editable s) {

    if ( s == weightEditText.getEditableText()){
        mSendInfoFromBmrFragment.getweight(Integer.parseInt(s.toString()));
        mWeight = Integer.parseInt(s.toString());
    } else if ( s == heightEditText.getEditableText()) {
        mSendInfoFromBmrFragment.getheight(Integer.parseInt(s.toString()));
        mHeight = Integer.parseInt(s.toString());
    } else if ( s == ageEditText.getEditableText()){
        mSendInfoFromBmrFragment.getage(Integer.parseInt(s.toString()));
        mAge = Integer.parseInt(s.toString());
    }

    if ( (!(weightEditText.getEditableText().toString().equals("")) && !(heightEditText.getEditableText().toString().equals("")) && !(ageEditText.getEditableText().toString().equals("")))) {
        mSendInfoFromBmrFragment.editTextComplete(true);
    } else {
        mSendInfoFromBmrFragment.editTextComplete(false);
    }

}

界面

public interface sendInfoFromBmrFragment {

        public void getheight(int height);
        public void getweight(int weight);
        public void getage(int age);
        public void editTextComplete(boolean editTextComplete);
        public void sex(String sex);

    }

【问题讨论】:

  • 当我们看不到你的代码时很难说是哪种方法。
  • @KristyWelsh 代码已添加
  • Soo.. 我改变了逻辑.. 可能它不是超级优化,但它可以工作.. 我将复选框更改为在开始时禁用.. 然后删除条件“mSendInfoFromBmrFragment.editTextComplete(true);”并替换使用 myChecbox.setEnabled(true) ,然后如果我的 checbox 被选中,我将启用按钮去另一个活动。

标签: android methods interface android-lifecycle


【解决方案1】:

对于单选按钮,如果您知道它们的编号并且它们是静态的,则可以声明一个数组,如下所示:

 public Boolean AllRadiosAreChecked;
 private Boolean Checked[] = 
  {
      false, // sexMan is checked ?
      false   // sexWoman is checked ?
   };

然后,在同一个活动中覆盖 OnCheckedChanged

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

    if (isChecked){
        switch (buttonView.getId()){

            case R.id.sexMan:
                 Checked[0]=true;
                 break;

            case R.id.sexWoman:
                Checked[1]=true;
                break;

如果所有单选按钮都被选中,那么您可以在任何地方检查:

                AllRadiosAreChecked=true;
                for (int i = 0; i < 2; i++)
                {
                    if (!Checked[i])
                    {
                        AllRadiosAreChecked= false;
                    }
                }
                if(!AllRadiosAreChecked){

                    // NOT all radio buttons are checked
                }
                else{
              // All radio buttons are checked enter code here

                }

数组中的这个条件必须声明为对无线电进行分组。

祝你好运

【讨论】:

    【解决方案2】:

    您可以将回调添加到您的复选框,然后它们都是真实的,您需要在父活动中调用方法(例如发送活动片段 ID 和布尔值)。要从活动中调用方法,您需要使用下一个代码

    ((ParentActivity)getActivity()).yourMethod();
    

    然后活动从您需要更改按钮可见性的所有片段中接收所有布尔值。

    【讨论】:

    • 当所有 EditTexts 完成时,片段发送 booleand true .. 但我也想用复选框连接条件
    【解决方案3】:

    如果你有edittext,你可以添加textchangelistener,如果你有复选框,你可以添加它的监听器,在监听器中你可以检查验证。根据验证,您可以启用或禁用下一个活动的按钮。您可以将该按钮设为静态以从其他类访问。​​

    在每个侦听器中,您可以调用一个公共静态方法,您将在其中每次检查所有验证,如果满足,则方法将返回 true,您可以启用按钮。

    【讨论】:

    • 我知道.. 但我想将这些条件混合在一个地方,如果一切都为真,则显示一个按钮。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多