java - Android 自定义 toast 消息不能在单独的类中工作

标签 java android toast android-toast

我为自定义 toast 创建了以下方法。

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 not execute method for android:onClick at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:389)".

我需要在下面的类(class)中更改什么?

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

最佳答案

我猜你的问题是当你膨胀你的布局时:

View layout = inf.inflate(R.layout.custom_toast_layout,(ViewGroup)findViewById(R.id.myCustomToast));

我也猜测问题是 (ViewGroup)findViewById(R.id.myCustomToast)。您正在尝试查找该类中不存在但在您的 MainActivity 中存在的 View/ViewGroup。

将其作为参数传递给您的方法(只是相关部分):

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

关于java - Android 自定义 toast 消息不能在单独的类中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52300451/

相关文章:

java - 从 PDF 中提取数据的最简单方法是什么?

java - 将从一个响应中获取的 sessionId 传递给下一个请求

Android SIP API - SipAudioCall.Listener.onRingingBack() 之后,如何听到任何等待的声音

java - 如何在 android 中的 onPause() 之前显示 toast 消息?

javascript - 如何在 Toast 通知上添加撤消按钮?

android - 使用 ConnectivityManager 和 NetworkInfo 避免 NullPointerException

java - Rally REST WS 查询 : Getting ObjectIDs of One-To-Many children using API v2. 0

java - 按照使用 jFeatureLib 获取 SIFT 特征的过程进行操作,但 .csv 为空

android - 我如何在 MonoDroid 中使用长按?

android - java.lang.RuntimeException : Failed to invoke public android. arch.lifecycle.LiveData() 没有参数