【问题标题】:Android No suitable parent found from the given view [duplicate]Android从给定视图中找不到合适的父级[重复]
【发布时间】:2018-12-14 06:35:12
【问题描述】:

我正在尝试通过将其创建为 Utils.java 文件中的函数来为我的应用程序实现通用 SnackBar 代码。一切都很好,但每当我尝试打开这个 SnackBar 时,我的应用程序就会不断崩溃。 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.movi​​eduka.wp.wordpressvlog E/MultiWindowProxy:getServiceInstance 失败! 07-05 20:18:37.595 18456-18456/com.movi​​eduka.wp.wordpressvlog E/AndroidRuntime: 致命异常: main 进程:com.movi​​eduka.wp.wordpressvlog,PID:18456 java.lang.IllegalArgumentException:从给定视图中找不到合适的父级。请提供有效的观点。 在 android.support.design.widget.Snackbar.make(Snackbar.java:174) 在 com.movi​​eduka.wp.wordpressvlog.utils.Utils.snackBar(Utils.java:29) 在 com.movi​​eduka.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)

【问题讨论】:

    标签: java android android-snackbar


    【解决方案1】:

    这样改变你的方法

    util.snackBar(view,"A Simple SnackBar!");
     public void snackBar(View view,String msg) {
        Snackbar.make(view, msg, Snackbar.LENGTH_LONG).setAction("Action", null).show();
    }
    

    【讨论】:

      【解决方案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);
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2019-05-21
        • 1970-01-01
        • 2018-05-19
        • 1970-01-01
        • 2021-08-24
        • 2020-01-15
        • 2018-06-30
        • 2016-11-09
        • 1970-01-01
        相关资源
        最近更新 更多