5

我想知道是否有人可以帮助我。我正在尝试在收到 SMS 时显示 toast 元素。这个 toast 应该包含一个布局,它有一个图像(SMS 图标)和 2 个文本视图(发件人,消息)

如果我从活动中调用以下方法,它会按预期工作......

public void showToast(Context context, String name, String message) {
    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.toast_sms,
                                   (ViewGroup) findViewById(R.id.toast_sms_root));

    TextView text = (TextView) layout.findViewById(R.id.toastsms_text);
    text.setText(message);

    Toast toast = new Toast(getApplicationContext());
    toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    toast.setDuration(Toast.LENGTH_LONG);
    toast.setView(layout);
    toast.show();
}

但是,如果我尝试从 SMSReceiver 以相同的方式调用相同的代码,我会得到:

The method getLayoutInflater() is undefined for the type SmsReceiver
The method findViewById(int) is undefined for the type SmsReceiver
The method getApplicationContext() is undefined for the type SmsReceiver

有人可以建议我如何从意图中做到这一点。我认为这个问题在某种程度上与跨线程有关,但是我不确定如何继续。我在网上看过几个例子,但它们似乎要么使用不推荐使用的代码,要么只显示简单的文本

有人可以指出我正确的方向吗

非常感谢

4

3 回答 3

11

您可以使用 LayoutInflater.from(context) 来获取您的 LayoutInflater。像这样:

LayoutInflater mInflater = LayoutInflater.from(context);
View myView = mInflater.inflate(R.layout.customToast, null);
TextView sender = (TextView) myView.findViewById(R.id.sender);
TextView message = (TextView) myView.findViewById(R.id.message);
于 2009-10-25T02:41:08.673 回答
7

您的编译错误是因为BroadcastReceiver不继承自Context. 使用Context传入的那个onReceive()(并摆脱getApplicationContext()- 只需使用Context你传入的)。

现在,这可能仍然行不通,因为我不确定您是否可以Toast从 aBroadcastReceiver首先提出 a ,但这至少可以让您克服编译错误。

于 2009-10-24T19:23:19.910 回答
1

可以从 Activity 或 Service 而非广播接收器创建和显示 toast

于 2012-02-02T07:23:29.197 回答