如何解决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(材料设计组件)的迁移,这有助于对带有主题属性的小吃店进行全局样式设计。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。