Не удается разрешить Snackbar.make () в setOnclicklistener с помощью лямбды - PullRequest
0 голосов
/ 18 октября 2018

Я пытался добавить сообщение типа Snackbar для своих действий. Когда я использовал Snackbar, он выдает ошибку, не может разрешить make ().

Snackbar.make(this,"Field should not be empty ",Snackbar.LENGTH_SHORT).show();

Но это выдает ошибку

не могу решить метод 'make ()'

После поиска в Google и проверки SO я обнаружил, что он как-то хорошо работает с обычным setOnclicklistener, также я попробовал его, и он хорошо работал в setOnclicklistener фрагмента, но яиспользуя 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 ()

Есть предложения или мысли?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы можете увидеть объявление 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;
    }
}
0 голосов
/ 18 октября 2018

Вы можете позвонить SnackBar.make() в диапазоне активности.Таким образом, this - это активность, а не просмотр.Вы должны изменить код следующим образом SnackBar.make(loginButton,...).


Обновление

По сравнению с Toast, SnackBar включен в Activity.Таким образом, если вы нажмете кнопку «Домой», тост будет отображаться, но снэк-бар будет скрыт вместе с активностью.Потому что снэк-бар используется для отображения сообщений пользователям и взаимодействия с ними.

В кодах SnackBar в источнике Android он находит родительскую группу представлений, используя параметр представления.А макет Snackbar включен в группу представлений.

...