BroadcastReceiverからの複雑なトーストを表示
-
06-07-2019 - |
質問
誰かが私を助けることができるのだろうか。 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
誰かが私が意図からそれを行う方法を助言してもらえますか?この問題はクロススレッドに何らかの関係があると思いますが、どうすればいいのかわかりません。オンラインでいくつかの例を見てきましたが、非推奨のコードを使用しているか、単純なテキストのみを表示しているようです
誰かが私を正しい方向に向けてくれますか
多くの感謝
解決
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);
他のヒント
コンパイルエラーは、 BroadcastReceiver
が Context
を継承しないためです。 onReceive()
に渡される Context
を使用します(そして getApplicationContext()
を取り除きます-単に Context コード>が渡されます)。
今、これは、 BroadcastReceiver
から最初に Toast
を上げることができるかどうかわからないため、まだ動作しない可能性があります、ただし、少なくともコンパイルエラーは発生しません。
トーストは、ブロードキャストレシーバーではなく、アクティビティまたはサービスから作成および表示できます
所属していません StackOverflow