2009-10-24 15 views
5

मुझे आश्चर्य है कि कोई मेरी मदद कर सकता है या नहीं। जब एसएमएस प्राप्त होता है तो मैं टोस्ट तत्व प्रदर्शित करने की कोशिश कर रहा हूं। यह टोस्ट एक लेआउट जो एक छवि (एसएमएस चिह्न) और 2 textviews (प्रेषक, संदेश)ब्रॉडकास्ट रिसीवर से जटिल टोस्ट दिखाएं

अगर मैं एक गतिविधि से निम्न विधि कहते हैं, यह काम करता है के रूप में उम्मीद है ... शामिल करना चाहिए

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 

किसी कृपया सलाह सकते हैं कि कैसे मैं एक इरादे से tihs कर सकते हैं। मुझे लगता है कि समस्या किसी भी तरह से क्रॉस-थ्रेडिंग से संबंधित है, हालांकि, मुझे यकीन है कि आगे बढ़ना कैसे है। मैं उदाहरण के एक जोड़े को देखा है ऑनलाइन लेकिन वे या तो उपयोग कोड पदावनत करने के लिए या केवल साधारण पाठ प्रदर्शित लगते

किसी कृपया मुझे सही दिशा में

बहुत धन्यवाद

+0

किसी भी कारण/downvote के लिए रचनात्मक आलोचना? – Basic

उत्तर

10

आप अपना लेआउट इनफ्लेटर प्राप्त करने के लिए LayoutInflater.from (संदर्भ) का उपयोग कर सकते हैं। इस तरह:

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

ऐसा किया गया, बहुत धन्यवाद :) – Basic

7

आपका संकलन त्रुटियों क्योंकि कर रहे हैं बात कर सकते हैं BroadcastReceiverContext से प्राप्त नहीं है। Context का उपयोग करें जो onReceive() में पारित किया गया है (और getApplicationContext() से छुटकारा पाएं - बस Context को पारित करें)।

अब

, इस अभी भी काम कर सकते हैं नहीं, के रूप में मुझे यकीन है कि नहीं कर रहा हूँ अगर आप पहली जगह में एक BroadcastReceiver से एक Toast बढ़ा सकते हैं, लेकिन यह कम से कम पिछले संकलन त्रुटियों आप मिल जाएगा।

+0

धन्यवाद मैं अब कोशिश करूँगा – Basic

+0

ठीक है, अब मैं नया टोस्ट (संदर्भ) कर रहा हूं लेकिन यह अन्य 2 संकलन त्रुटियों को हल नहीं किया है - getLayoutInflater और findViewById। मैं इन्हें संदर्भ/त्वरित कैसे कर सकता हूं? – Basic

+0

findViewById() केवल गतिविधि में मौजूद है। लेआउट() कॉल पर अपने दूसरे पैरामीटर के रूप में शून्य में पास करें। लेआउट इन्फ्लेटर प्राप्त करने के लिए, एसडीके में लेआउटइनफ्लेटर के लिए प्रलेखन देखें। – CommonsWare

2

एक टोस्ट बनाया है और एक गतिविधि या सेवा से प्रदर्शित किया जा सकता, रिसीवर प्रसारण नहीं

+0

इसे कठिन तरीके से मिला। –

+0

नहीं, एक प्रसारण रिसीवर से टोस्ट प्रदर्शित किया जा सकता है, यह मेरे लिए काम करता है, इसलिए यह संभव है। –

संबंधित मुद्दे