5

誰かが私を助けてくれるのだろうか。SMS を受信したときにトースト要素を表示しようとしています。このトーストには、画像 (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

そもそも aから aを発生させることができるかどうかわからないので、これでもまだうまくいかないかもしれませんが、これで少なくともコンパイル エラーは回避できます。ToastBroadcastReceiver

于 2009-10-24T19:23:19.910 に答える
1

トーストは、ブロードキャスト レシーバーではなく、アクティビティまたはサービスから作成および表示できます。

于 2012-02-02T07:23:29.197 に答える