Android Не найдено подходящего родителя из данного представления

Я пытаюсь реализовать универсальный код SnackBar для моего приложения, создав его как функцию в файле Utils.java. Все хорошо, но мое приложение продолжает падать всякий раз, когда я пытаюсь открыть этот снэк-бар. Ошибка thet зарегистрирован в logcat java.lang.IllegalArgumentException: No suitable parent found from the given view. Please provide a valid view.

Пример кода в файлах MainActivity.java, Utils.java и полном блоке ошибок logcat приведен ниже. Буду признателен за любую помощь... заранее спасибо.

MainActivity.java

public class MainActivity extends AppCompatActivity {
public Utils util;
public Constants k;

@Override
protected void onCreate(Bundle savedInstanceState) {

    util = new Utils(this);
    k = new Constants();

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            util.snackBar("A Simple SnackBar!");
        }
    });

Utils.Java

import android.content.Context;
import android.content.Intent;
import android.support.design.widget.Snackbar;
import android.view.View;

import com.example.wp.wordpressvlog.MainActivity;
import com.example.wp.wordpressvlog.NewProductActivity;
import com.example.wp.wordpressvlog.R;

public class Utils {
    private Context _con;
    public View v;

    public Utils (Context _con) {
        this._con = _con;
    }
    public void snackBar(String msg) {
        Snackbar.make(v, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show();
    }
}

ошибка logcat

07-05 20:17:52.125 18456-18456/com.movieduka.wp.wordpressvlog E/MultiWindowProxy: ошибка getServiceInstance! 07-05 20:18:37.595 18456-18456/com.movieduka.wp.wordpressvlog E/AndroidRuntime: ОСНОВНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.movieduka.wp.wordpressvlog, PID: 18456 java.lang.IllegalArgumentException: не найдено подходящего родителя с данного взгляда. Пожалуйста, предоставьте действительный вид. на android.support.design.widget.Snackbar.make(Snackbar.java:174) на com.movieduka.wp.wordpressvlog.utils.Utils.snackBar(Utils.java:29) на com.movieduka.wp.wordpressvlog.MainActivity$1.onClick(MainActivity.java:40) на android.view.View.performClick(View.java:5273) на android.view.View$PerformClick.run(View.java:21542) на android.os.Handler.handleCallback(Handler.java:815) в android.os.Handler.dispatchMessage(Handler.java:104) в android.os.Looper.loop(Looper.java:207) в android.app.ActivityThread.main(ActivityThread.java:5728) на java.lang.reflect.Method.invoke(собственный метод) на com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:679)

2 ответа

Решение

Изменить в utils.java

public void snackBar(String msg, View v) {
    Snackbar.make(v, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show();
}

изменить в MainActivity.java

fab.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        util.snackBar("A Simple SnackBar!", view);
    }
});

Изменить свой метод таким образом

util.snackBar(view,"A Simple SnackBar!");
 public void snackBar(View view,String msg) {
    Snackbar.make(view, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
Другие вопросы по тегам