我正尝试为操作添加Snackbar类型的消息,当我使用Snackbar时,它给出错误无法解析make()。
Snackbar.make(this,"Field should not be empty ",Snackbar.LENGTH_SHORT).show();
但这会导致错误
无法解析方法'make()'
在谷歌上搜索并检查之后,我发现它可以正常使用setOnclicklistener,我也尝试了它,并且在片段的setOnclicklistener中也很好用,但是我将lambda表达式与setOnclicklistener一起使用,这就是为什么我很困惑使用点心栏,因为默认方法会出错。
这就是我正在做的
loginButton.setOnClickListener(view -> login());
这是我的登录功能
private void login() {
setError();
String email = loginUserName.getText().toString();
String password = loginPassword.getText().toString();
int err = 0;
if (!validateEmail(email)) {
err++;
Snackbar.make(this,"Enter Valid fields",Snackbar.LENGTH_SHORT).show(); //here is the problem
mTiEmail.setError("Email should be valid !");
}
if (!validateFields(password)) {
err++;
mTiPassword.setError("Password should not be empty !");
}
if (err == 0) {
loginProcess(email,password);
} else {
Toast.makeText(this, "Enter valid details", Toast.LENGTH_SHORT).show();
}
}
我希望我正确地使用了快餐栏,如果不正确,请告诉我,并在这里说明为什么会出错无法解析make()
有什么建议或想法吗?
答案 0 :(得分:1)
您可以在“活动”范围内调用SnackBar.make()
。因此this
是“活动不是视图”。您应该像这样SnackBar.make(loginButton,...)
更改代码。
与Toast相比,Activity中包含SnackBar。 因此,如果按“主页”按钮,仍会显示Toast,但该活动会隐藏SnackBar。 因为,快餐栏用于向用户显示消息并与用户进行交互。
在Android源代码中的SnackBar代码中,它使用view参数找到父视图组。 Snackbar布局包含在视图组中。
答案 1 :(得分:1)
您可以看到SnakeBar声明。当您传递当前类对象时,第一个参数是View。也许您的课程是活动。
Activity
通过findViewById(android.R.id.content)
都可以给出当前活动的根视图。或通过其他视图。
Fragment
Snackbar.make(getActivity().findViewById(android.R.id.content),"Sample", Snackbar.LENGTH_LONG).show();
这是Snackbar
声明。
@NonNull
public static Snackbar make(@NonNull View view, @NonNull CharSequence text, int duration) {
ViewGroup parent = findSuitableParent(view);
if (parent == null) {
throw new IllegalArgumentException("No suitable parent found from the given view. Please provide a valid view.");
} else {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
SnackbarContentLayout content = (SnackbarContentLayout)inflater.inflate(hasSnackbarButtonStyleAttr(parent.getContext()) ? layout.mtrl_layout_snackbar_include : layout.design_layout_snackbar_include, parent, false);
Snackbar snackbar = new Snackbar(parent, content, content);
snackbar.setText(text);
snackbar.setDuration(duration);
return snackbar;
}
}