Android Custom Toast Message не работает в отдельном классе - PullRequest
0 голосов
/ 12 сентября 2018

Я создал следующий метод для пользовательского тоста.

public void customToastMessage(String message){
    LayoutInflater inf = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = inf.inflate(R.layout.custom_toast_layout,(ViewGroup)findViewById(R.id.myCustomToast));
    TextView toastMessage = layout.findViewById(R.id.myCustomToastText);
    toastMessage.setText(message);
    Toast warningMessage = Toast.makeText(con, message, Toast.LENGTH_LONG);
    warningMessage.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 10);
    warningMessage.setView(layout);
    warningMessage.show();
}

Пока этот метод существует в MainActivity, он работает нормально, но когда я перемещаю его в отдельный класс, я получаю:

"java.lang.IllegalStateException: Couldне выполнить метод для Android: onClick в android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick (AppCompatViewInflater.java:389) ".

Что мне нужно изменить в моем классе ниже?

public class MyCustomUI extends AppCompatActivity {

    private static Context con;

    public MyCustomUI(Context con){
        this.con = con;
    }

    public void customToastMessage(String message){
         LayoutInflater inf = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         View layout = inf.inflate(R.layout.custom_toast_layout,(ViewGroup)findViewById(R.id.myCustomToast));
         TextView toastMessage = layout.findViewById(R.id.myCustomToastText);
         toastMessage.setText(message);
         Toast warningMessage = Toast.makeText(con, message, Toast.LENGTH_LONG);
         warningMessage.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 10);
         warningMessage.setView(layout);
         warningMessage.show();
    }
}

1 Ответ

0 голосов
/ 12 сентября 2018

Полагаю, ваша проблема в том, что вы раздуваете свой макет:

Просмотр макета = inf.inflate (R.layout.custom_toast_layout, (ViewGroup) findViewById (R.id.myCustomToast));

Я также предполагаю, что проблема (ViewGroup)findViewById(R.id.myCustomToast).Вы пытаетесь найти View / ViewGroup, который не существует в этом классе, но в вашей MainActivity.

Передайте его в качестве аргумента вашему методу (только соответствующая часть):

public void customToastMessage(String message, ViewGroup customToast){
    LayoutInflater inf = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = inf.inflate(R.layout.custom_toast_layout, viewgroup);
...