2009-10-24 23 views
5

Tôi tự hỏi liệu có ai đó có thể giúp tôi không. Tôi đang cố gắng hiển thị phần tử bánh mì nướng khi nhận được tin nhắn SMS. bánh mì nướng này nên chứa một bố trí trong đó có một hình ảnh (SMS Icon) và 2 TextView (người gửi, tin nhắn)Hiển thị bánh mì nướng phức tạp từ BroadcastReceiver

Nếu tôi gọi phương thức sau đây từ một hoạt động, nó hoạt động như mong đợi ...

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(); 
} 

Tuy nhiên, nếu tôi cố gắng gọi cùng mã trong cùng một cách từ SMSReceiver của tôi, tôi nhận được:

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 

ai đó có thể xin tư vấn làm thế nào tôi có thể làm tihs từ một ý định. Tôi cho rằng vấn đề là bằng cách nào đó liên quan đến cross-threading tuy nhiên, tôi không chắc chắn làm thế nào để tiến hành. Tôi đã nhìn thấy một vài ví dụ trực tuyến, nhưng họ dường như cả hai sử dụng phản mã hoặc chỉ hiển thị văn bản đơn giản

Có thể ai đó xin vui lòng chỉ cho tôi đi đúng hướng

Rất cám ơn

+0

Bất kỳ lý do/chỉ trích mang tính xây dựng cho downvote? – Basic

Trả lời

10

Bạn có thể sử dụng LayoutInflater.from (ngữ cảnh) để tải LayoutInflater của mình. Như thế này:

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); 
+1

Điều đó đã làm điều đó, cảm ơn rất nhiều :) – Basic

7

lỗi biên dịch của bạn là vì BroadcastReceiver không được kế thừa từ Context. Sử dụng số Context được chuyển vào onReceive() (và loại bỏ getApplicationContext() - chỉ cần sử dụng số Context bạn được chuyển).

Bây giờ, điều này có thể vẫn không hoạt động, như tôi không chắc chắn nếu bạn có thể nâng cao một Toast từ một BroadcastReceiver ở nơi đầu tiên, nhưng điều này sẽ ít nhất giúp bạn có quá khứ lỗi biên dịch.

+0

Cảm ơn tôi sẽ cố gắng mà bây giờ – Basic

+0

Ok, tôi bây giờ làm Toast mới (context) nhưng nó đã không được giải quyết thứ 2 biên dịch lỗi khác - getLayoutInflater và findViewById. Làm cách nào để tôi có thể tham chiếu/khởi tạo những điều này? – Basic

+0

findViewById() chỉ tồn tại trong Hoạt động. Vượt qua null như tham số thứ hai của bạn vào cuộc gọi layout(). Để có được một LayoutInflater, hãy xem tài liệu cho LayoutInflater trong SDK. – CommonsWare

2

Một bánh mì nướng có thể được tạo ra và hiển thị từ một Hoạt động hoặc dịch vụ, không phát sóng thu

+0

tìm thấy điều này một cách khó khăn. –

+0

Không, một bánh mì nướng có thể được hiển thị từ một máy thu phát sóng, nó làm việc cho tôi, vì vậy nó có thể. –