【问题标题】:Show toast in onActivityResult在 onActivityResult 中显示 toast
【发布时间】:2015-06-28 22:41:51
【问题描述】:

我正在尝试在活动返回结果时显示敬酒消息。但是,我使用的是自定义充气吐司。普通吐司工作正常,但我的自定义吐司不会显示。代码如下。

主要活动的onCreate()

@Override
    public void onCreate(Bundle savedInstance){
        super.onCreate(savedInstance);
        setContentView(R.layout.activity_login);

        emailTxt = (TextView)this.findViewById(R.id.email_field);
        passwordTxt = (TextView)this.findViewById(R.id.password_field);

        wgmService = ((MainApp)this.getApplication()).wegmannAdapter.create(WegmannService.class);

        spinner = (ProgressBar)this.findViewById(R.id.progress_bar);
        spinner.setVisibility(View.GONE);

        LayoutInflater inflater = getLayoutInflater();
        View layout = inflater.inflate(R.layout.toast, (ViewGroup)findViewById(R.id.toast_layout));
        toastText = (TextView)layout.findViewById(R.id.toast_text);
        toast = new Toast(getApplicationContext());
        toast.setGravity(Gravity.BOTTOM, 0, 0);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setView(layout);

        fadeIn = AnimationUtils.loadAnimation(this,  R.anim.fade_in);
        fadeOut = AnimationUtils.loadAnimation(this, R.anim.fade_out);
    }

主要活动的onActivityResult

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        switch(requestCode) {
            case SIGNUP_VIEW:
                if(resultCode == RESULT_OK){
                    toastText.setText(data.getExtras().getString("message"));
                    toast.show();
                }
                break;
        }
    }

通过以上内容,我看不到 toast 消息。但是,如果我将 onActivityResult 中的行替换为 Toast.makeText(getBaseContext(),"MESSAGE", Toast.LENGTH_LONG).show(),则会出现一条消息。在这种情况下,我需要能够使用我的自定义吐司。任何帮助或指导表示赞赏。

【问题讨论】:

    标签: java android toast onactivityresult


    【解决方案1】:

    您的错误很简单:您更改了 textField toastText 并且不添加要显示的 toast 的文本。

    这段代码应该可以工作:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
        switch(requestCode) {
            case SIGNUP_VIEW:
                if(resultCode == RESULT_OK){
                    toast.setText(data.getExtras().getString("message"));
                    toast.show();
                }
                break;
        }
    }
    

    【讨论】:

    • 实际上,toastText 是一个 TextView,它是我的自定义 toast 的自定义布局的一部分。设置它确实设置了文本。我应该解释一下。 toast.setText 在我的自定义布局中确实不是必需的。我在几个地方都使用了相同的概念,而且效果很好。
    • 但我认为它也不会在 onActivityResult-Method 中设置文本。还是这样?
    • 确实如此。我现在发现了问题。我在下面发布答案。
    【解决方案2】:

    原来问题出在我的其他活动中。我正在设置我的额外信息:

    Intent intent = new Intent();
                intent.putExtra("message", R.string.messages_signup_success);
                setResult(RESULT_OK, intent);
                finish();
    

    但是,R.string.messages_signup_success 返回一个 int,当检索到它时会抛出一个非严重警告,并且不会显示我的 toast 但不会崩溃。将代码更改为以下可以解决问题:

    Intent intent = new Intent();
                intent.putExtra("message", getBaseContext().getString(R.string.messages_signup_success));
                setResult(RESULT_OK, intent);
                finish();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2016-06-15
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      相关资源
      最近更新 更多