Хо, чтобы вызвать собственное тост-сообщение из другой деятельности - PullRequest
0 голосов
/ 08 июня 2019

Я определил свой собственный метод для отображения Toast и хочу вызвать его из другого Activity. Когда я делаю это, мое приложение падает. У вас есть Attempt to invoke virtual method.... on a null object reference.

Метод Тост:

 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();

}

и код из 2-го упражнения:

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

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

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Есть пара проблем с вашим кодом:

  1. Никогда не создавайте действия самостоятельно (mainActivity = new MainActivity).Это не работает, только ОС Android может создавать действия.Я предлагаю воспользоваться некоторыми (бесплатными) онлайн-уроками для начинающих по Android, чтобы понять, как работают задания и какова их роль.

  2. Написанная вами функция тоста - это служебная функция, которая не отображаетсяиметь какое-либо отношение к MainActivity.Если вы поместите его в качестве статической функции другого класса (цель которого состоит только в том, чтобы предоставлять такие полезные служебные функции, как этот), например ActivityTools.java, то вы можете вызвать его из любого места и передать ему такой же контекст, как и вы.

  3. В вашей функции toast вы получаете контекст в качестве первого параметра, но затем немедленно перезаписываете его.Это не имеет никакого смысла, нет причины переписывать это так.

0 голосов
/ 08 июня 2019

Удалите эту строку из своего кода, поскольку вы уже передаете значение контекста, поэтому нет необходимости заново инициализировать с помощью контекста приложения.

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();
}
...