从父活动android获取片段编辑文本值

时间:2018-03-19 14:18:48

标签: android android-fragments

我在DialogFragment课程上有一个Activity。这个片段有一个EditText字段,我想要做的就是检查输入字段是否少于3位,然后显示一个Toast消息。应用程序不断崩溃,我甚至无法看到它在LogCat / Stacktrace中引发的异常。

活动类:

public class ParentActivity extends AppCompatActivity{
    public boolean getTextCodeLength(){
        EditText editTextfield = (EditText)findViewById(R.id.textFieldName);
        if(editTextfield.length() < 4)
        {
            return false;
        }
        return true;
    }
}

片段类:

public class EnterTextFragment extends DialogFragment {
    public void onDialogOkClick(DialogInterface dialog) {
     try {
            15. boolean result = ((ParentActivity) getActivity()).getTextCodeLength();
            if (result == false) {
                Toast.makeText(myContext, "Code needs to be longer than 4 digits", Toast.LENGTH_LONG).show();
            }
        }
        catch(Exception ex)
        {
            Log.e("YOUR_APP_LOG_TAG", "I got an error", ex);
        }

    //Perform some other functions
    }
}

每当它遇到标有数字15的行时 - 它就会一直崩溃,我甚至无法解决导致错误的原因,因为我无法在LogCat中看到任何异常,如上所述。一些帮助将非常值得赞赏。

更多背景信息: 吐司用于测试目的。理想情况下,如果用户的输入少于4位,我想让用户留在片段上。

2 个答案:

答案 0 :(得分:1)

为什么你不处理片段内的getTextCodeLength()?在活动中定义它是错误的,因为它使用片段中的字段,结果仅在片段内使用。我想在片段中保留字段的引用(在层次结构中查找视图是昂贵的,并且每次按下按钮时都不应该这样做)。因此,在片段中声明EditText

private EditText editText;

覆盖onCreateView以获取该字段的引用:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View contentView = inflater.inflate(R.layout.your_fragment_layout, container, false);
    editText = contentView.findViewById(R.id.textFieldName);
    return contentView;
}

然后从活动中删除getTextCodeLength(也可以重命名此方法,因为当前名称具有误导性)并将其移动到片段中:

public boolean getTextCodeLength(){
    if(editText.length() < 4)
    {
        return false;
    }
    return true;
}

现在一切都应该顺利运行而不会发生任何崩溃。

答案 1 :(得分:0)

将此代码移至onCreate活动方法:

mEditTextfield = (EditText)findViewById(R.id.textFieldName);

向您的活动类添加字段:

private EditText mEditTextfield;

修改方法:

public boolean getTextCodeLength(){
        if(mEditTextfield.length() < LIMIT)
        {
            return false;
        }
        return true;
}

还要检查片段是否附加到onDialogOkClick()中的活动。