【问题标题】:Can't find context in makeText() while making a Toast制作 Toast 时无法在 makeText() 中找到上下文
【发布时间】:2017-07-17 15:29:52
【问题描述】:

这是我的代码:

public class CustomDialog extends DialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder myDialogBuilder = new AlertDialog.Builder(getActivity());
    myDialogBuilder.setTitle("Get Ready To Rumble!");
    myDialogBuilder.setMessage("Do you wanna rumble?!");
    myDialogBuilder.setPositiveButton(
            new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast.makeText(. this, "Let's Rumble!", Toast.LENGTH_SHORT).show();
                }
            }
    )

    return myDialogBuilder.create();


}

}

该行的内容似乎有错误:

Toast.makeText(CustomDialog.this, "Let's Rumble!", Toast.LENGTH_SHORT).show();

我试过只输入“this”、“DialogFragment.this”... 似乎无法找出问题所在。

希望你们能帮帮我,抱歉代码太长了。

【问题讨论】:

  • 使用getActivity() 而不是CustomDialog.this
  • 不能工作,setPositiveButton() 方法全是红线。

标签: android toast mobile-development


【解决方案1】:

这样使用

Toast.makeText(CustomDialog.this.getActivity(), "Let's Rumble!", Toast.LENGTH_SHORT).show();

【讨论】:

  • 不能工作,setPositiveButton() 方法全是红线。
【解决方案2】:

你可以用这个

Dialog mainDialog  = (Dialog) dialog;
Context context = mainDialog.getContext();

【讨论】:

    【解决方案3】:

    有几种方法可以使这项工作 最简单的方法是调用它

    Toast.makeText(getActivity(), "test", Toast.LENGTH_SHORT).show();
    

    另一种方法是将上下文作为对话框构造函数参数与任何其他数据一起传递,但不要忘记创建一个默认的 noarg 参数

    public class CustomDialog extends DialogFragment {
    
    private Context context;
    
    public CustomDialog(Context context){
        this.context = context;
    }
    
    public CustomDialog(){}
    
    //you may get a warning but it works
    

    }

    【讨论】:

      【解决方案4】:

      当使用getActivity() 在片段中工作时,返回片段当前关联的活动。

      如果您在正常的活动中工作,传递上下文或getApplicationContext() 很好。

      【讨论】:

        【解决方案5】:

        您可以试试这个,只需在创建 CustomDialog 类对象时传递您的活动上下文:

        public class CustomDialog extends DialogFragment {
        
        private Context context;
        
        public CustomDialog(Context context){
            this.context = context;
        }
        public CustomDialog(){ } //default no arg constructor 
        
        @NonNull
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
        
            AlertDialog.Builder myDialogBuilder = new AlertDialog.Builder(getActivity());
            myDialogBuilder.setTitle("Get Ready To Rumble!");
            myDialogBuilder.setMessage("Do you wanna rumble?!");
            myDialogBuilder.setPositiveButton(
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Toast.makeText(context, "Let's Rumble!", Toast.LENGTH_SHORT).show();
                        }
                    }
            )
        
            return myDialogBuilder.create();
        
        
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-09-05
          • 2017-11-20
          • 2022-01-09
          相关资源
          最近更新 更多