Android如何从“主活动”中的另一个类调用“活动”数据类型?

问题描述

我有这个单独的代码类,该类使Snackbar显示在我的应用程序中,但是在我当前的实现中,我得到了“ java.lang.NullPointerException”。如何在主类中正确实现它?

这是我的小吃店课:

public class SnackBarUtils
{
private static SnackBarUtils mInstance = null;
private  Snackbar mSnackBar;

private SnackBarUtils()
{

}

public static SnackBarUtils getInstance()
{
    if (mInstance == null)
    {
        mInstance = new SnackBarUtils();
    }
    return mInstance;
}

public void hideSnackBar()
{
    if (mSnackBar != null)
    {
        mSnackBar.dismiss();
    }
}

public void showProblemSnackBar(final Activity activity,final String message)
{
    mSnackBar = Snackbar.make(activity.findViewById(android.R.id.content),message,Snackbar.LENGTH_INDEFINITE);
    // Changing action button text color
    View sbView = mSnackBar.getView();
    TextView textView = sbView.findViewById(com.google.android.material.R.id.snackbar_text);
    mSnackBar.setAction("x",new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            //Call your action method here
            mSnackBar.dismiss();
        }
    });
    textView.setTextColor(Color.WHITE);
    sbView.setBackgroundColor(Color.RED);
    textView.setMaxLines(3);
    mSnackBar.show();
}
}

这是我目前在主要活动中的实现,我已经像这样初始化了Snackbar类:

SnackBarUtils snackBarUtils;

然后这样称呼它:

snackBarUtils.showProblemSnackBar(MainActivity.this,mPlainTextResponse);

我在做什么错?或者正确的方法是什么?

解决方法

首先,您将共享NPE的堆栈跟踪以获取更多上下文。

对于快餐栏实用程序:
如果您使用的是回调,则可以使用该实用工具显示以该回调为参数的小吃店:

interface onProblemSnackbarClickedListener {
  void onActionClicked(View view);
}
...
/* inside SnackBarUtils.java */
...
public static void showProblemSnackbar(View view,@StringRes int message,onProblemSnackbarClickedListener listener){
   Snackbar mSnackBar = Snackbar.make(view,message,Snackbar.LENGTH_INDEFINITE)
    .setAction("x",new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        listener.onActionClicked(v);
        mSnackBar.dismiss();
      }
  })
  mSnackbar.show();
}

回调可以满足在活动/片段中监听它的需要。

有关Snackbar的样式,您可以看到以下相关问题: docs

请牢记从“支持设计”到MDC(材料设计组件)的迁移,这有助于对带有主题属性的小吃店进行全局样式设计。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...