何从其他活动中致电自己的吐司消息

时间:2019-06-08 11:03:28

标签: java android android-toast

我定义了自己的方法来显示Toast,我想从另一个Activity中调用它。当我这样做时,我的应用程序崩溃了。你有Attempt to invoke virtual method.... on a null object reference吗?

Toast方法:

 public void showToastDown(Context context, String message) {
    context = getApplicationContext();

    inflater = getLayoutInflater();
    View v = inflater.inflate(R.layout.toast_down, (ViewGroup) findViewById(R.id.toast_down_root));

    TextView tvToastDown = v.findViewById(R.id.tvToastDown);
    tvToastDown.setText(message);
    Toast toast = new Toast(context);
    toast.setGravity(Gravity.BOTTOM|Gravity.FILL_HORIZONTAL, 0,0);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(v);
    toast.show();

}

和第二个活动中的代码:

  switch (item.getItemId()){
    case  R.id.btnAddActionBar:

        MainActivity mainActivity= new MainActivity();
        mainActivity.showToastDown(this, "TEXT");
        break;
}
    return super.onOptionsItemSelected(item);
}

2 个答案:

答案 0 :(得分:0)

从代码中删除此行,因为您已经在传递上下文的值,因此无需再次使用Application Context进行初始化。

context = getApplicationContext();

编辑:像这样更改您的方法:

public void showToastDown(Context context, String message) {
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    View v = inflater.inflate(R.layout.toast_down, (ViewGroup) ((Activity)context).findViewById(R.id.toast_down_root));

    TextView tvToastDown = v.findViewById(R.id.tvToastDown);
    tvToastDown.setText(message);
    Toast toast = new Toast(context);
    toast.setGravity(Gravity.BOTTOM|Gravity.FILL_HORIZONTAL, 0,0);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(v);
    toast.show();
}

答案 1 :(得分:0)

您的代码有几个问题:

  1. 永远不要自己实例化活动(mainActivity = new MainActivity)。这是行不通的,只有Android OS可以创建活动。我建议在线上一些(免费)初学者android教程,以了解活动的工作原理及其作用。

  2. 您编写的Toast函数是一个实用程序函数,与MainActivity似乎没有任何关系。如果您将其作为其他类的静态函数(其目的仅是为了提供此类有用的实用程序函数),例如ActivityTools.java,然后您可以在任何地方调用它,并像执行操作一样将其传递给上下文。

  3. 在您的toast函数中,您将上下文作为第一个参数,但随后立即将其覆盖。这没有任何意义,没有理由像这样覆盖它。