2015-02-17 5 views
8

मेरे पास एक टुकड़ा है जो उपयोगकर्ता को एक संदेश और फ़ोन नंबर में प्रवेश करने की अनुमति देता है जिस पर संदेश वितरित किया जाएगा। मुझे एक त्रुटि मिल रही है "विधि getAplicationContext() को हल नहीं कर सकता है" मैंने जवाब the method getApplicationContext() is undefined पर देखा है, लेकिन इससे मेरी मदद नहीं हुई, शायद मैं इसे गलत कार्यान्वित कर रहा हूं लेकिन मुझे यकीन नहीं है! यह कोड एक गतिविधि के रूप में ठीक काम करता है लेकिन एक टुकड़े के रूप में नहीं।getAplicationContext() त्रुटि एंड्रॉइड

FragmentTab1 वर्ग

package com.androidbegin.absfragtabhost; 

import android.content.Context; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.app.Fragment; 
import android.app.Activity; 
import android.telephony.SmsManager; 
import android.util.Log; 
import android.view.Menu; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

public class FragmentTab3 extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragmenttab3, container, false); 
    super.onCreate(savedInstanceState); 
    //setContentView(R.layout.activity_main); 

    sendBtn = (Button) rootView.findViewById(R.id.btnSendSMS); 
    txtphoneNo = (EditText) rootView.findViewById(R.id.editTextPhoneNo); 
    txtMessage = (EditText) rootView.findViewById(R.id.editTextSMS); 

    sendBtn.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      sendSMSMessage(); 
     } 
    }); 

    return rootView; 
} 



    Button sendBtn; 
    EditText txtphoneNo; 
    EditText txtMessage; 



    protected void sendSMSMessage() { 
     Log.i("Send SMS", ""); 

     String phoneNo = txtphoneNo.getText().toString(); 
     String message = txtMessage.getText().toString(); 

     try { 
      SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendTextMessage(phoneNo, null, message, null, null); 
      Toast.makeText(getApplicationContext(), "SMS sent.", 
        Toast.LENGTH_LONG).show(); 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), 
        "SMS failed, please try again.", 
        Toast.LENGTH_LONG).show(); 
      e.printStackTrace(); 


     } 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 


} 

उत्तर

32

विधि getApplicationContext() वर्ग Fragment में मौजूद नहीं है। हालांकि, यह Activity वर्ग में मौजूद है, इसलिए आप एक खंड वस्तु के भीतर से संदर्भ प्राप्त करने के लिए getActivity().getApplicationContext() का उपयोग कर सकते हैं। (खंड को मानना ​​एक गतिविधि से जुड़ा हुआ है, इसलिए getActivity() एक गैर-शून्य वस्तु लौटाएगा, जो आम तौर पर सत्य है)

5

उपयोग getActivity().getApplicationContext();

0

यहां जवाब देखें: using context in fragment

बस getActivity() पर कॉल करें, सुनिश्चित करें कि यह शून्य नहीं है, और उस पर getApplicationContext() पर कॉल करें।

1

आप टुकड़ा गतिविधि

getActivity().getApplicationContext(); 

में ऐप्लिकेशन संदर्भ उपलब्ध का उपयोग करना चाहिए आप getActivity() संदर्भ यहाँ के रूप में उपयोग नहीं करना चाहिए क्योंकि Toast गतिविधि है कि यह पता चला है (होम बटन के रूप में दबाया गया से अधिक समय रह सकते हैं, एक और गतिविधि का शुभारंभ किया गया है, आदि)

http://developer.android.com/guide/topics/ui/notifiers/toasts.html#Basics

1

शायद यह getActivity() गतिविधि प्रसंग फैली रूप से काफी है।

वैसे भी, कृपया यह जानने के लिए कि क्या आपको getActivity()। GetAplicationContext() प्राप्त करें या प्राप्त करें सक्रियता() प्राप्त करने के लिए आपको Context with the lifecycle separated from you Activity's Context की आवश्यकता है या नहीं।

अधिक जानकारी के लिए this thread का संदर्भ लें।

0

getApplicationContext() मौजूद नहीं था या आप फ्रैगमेंट क्लास में परिभाषित नहीं कह सकते हैं जिसका अर्थ है कि आप सीधे फ्रैगमेंट क्लास के अंदर इसका उपयोग नहीं कर सकते हैं।

तो समाधान आप

Toast.makeText(getActivity().getApplicationContext(), "SMS sent.",Toast.LENGTH_LONG).show(); 

मैं आशा है कि यह मदद करता है निम्नलिखित की तरह getActivity() विधि का उपयोग करना चाहिए कि के बजाय इस

Toast.makeText(getApplicationContext(), "SMS sent.",Toast.LENGTH_LONG).show(); 

की तरह कर रही है।

1

आप गैर गतिविधि वर्ग पर एक निर्माता है कि तर्क पर एक संदर्भ लेता है, और अपनी गतिविधि वर्ग पर बनाने के लिए है, तो आप, वस्तु की घोषणा पर संदर्भ पारित करने के लिए है इस तरह:

//ON non activity class : 
public class longcomputingtask extends AsyncTask<Void,Integer,Void> { 

    private Context context ; 

    public longcomputingtask() 
    { 
    } 

    public longcomputingtask(Context context) 
    { 
     this.context=context; 
    } 

// on activity class : 

public Context context; 
context=getApplication().getBaseContext(); 

longcomputingtask calcul =new longcomputingtask(context): 
संबंधित मुद्दे