2012-05-26 13 views
40

मैं एक टोस्ट संदेश दिखाने की कोशिश कर रहा हूं जब उपयोगकर्ता एक टुकड़े के अंदर बटन पर क्लिक करता है। समस्या यह है कि मैं टोस्ट दिखाने के लिए गतिविधि तक नहीं पहुंच सकता।टुकड़े के अंदर टोस्ट का उपयोग करें

यहाँ Fragment का स्रोत है:

public class FrgTimes extends Fragment 
    { 
     ScrollView sv; 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) 
     { 
      if (container == null) { return null; } 

      sv = (ScrollView)inflater.inflate(R.layout.frg_times, container, false); 

      btnTime1.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 

      //****** HERE's the PROBLEM ******** 
      Toast.makeText(<The Activity>, "Please long press the key", Toast.LENGTH_LONG); 

      }}); 

      return sv; 
     } 

और यहाँ मैं क्या करने की कोशिश की आ रहे हैं।

Toast.makeText(getActivity() , ... 
Toast.makeText(getView().getContext() , ... 
Toast.makeText(getActivity().getApplicationContext() , ... 
Toast.makeText(sv.getContext() , ... 
Toast.makeText(sv.getRootView().getContext() , ... 

डीबग में मुझे लगता है कि इन कोड के सभी किसी भी अपवाद के बिना चला लेकिन कोई TOAST प्रदर्शित किया जा रहा देख सकते हैं।

उत्तर

91

Toast पर आप show() पर कॉल नहीं कर रहे हैं, आप makeText() के साथ बना रहे हैं।

+21

यह छोटा ** 'दिखाएं ** ** मेरे 3 घंटे से अधिक समय लेता है। धन्यवाद, अब सब कुछ सुंदर लगता है। – mammadalius

+5

यह मेरी मानक त्रुटि है - अच्छी खबर यह है कि लिंट एसडीके 20 के रूप में इस त्रुटि का पता लगाता है। –

+0

बेवकूफ मुझे .. थैट्स मेरी गलती थी..मैंने कॉल शो नहीं किया() – John

17

मेरी एक ही समस्या के साथ एक और लोगों की मदद करने के लिए, पूरा जवाब टुकड़ा अंदर टोस्ट का उपयोग करने के लिए है:

Activity activity = getActivity(); 

@Override 
public void onClick(View arg0) { 

    Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show(); 
} 
41

alfo888_ibg द्वारा कहा गया है:

@Override 
public void onClick(View arg0) { 
    Toast.makeText(activity,"Text!",Toast.LENGTH_SHORT).show(); 
} 

बस कार्य करें:

Toast.makeText(getActivity(),"Text!",Toast.LENGTH_SHORT).show(); 

यह मेरे लिए काम किया।

0

user2564789 ने कहा कि यह सही
लेकिन क्या आप भी thisgetActivity()
के स्थान पर उपयोग कर सकते हैं जो आपके टोस्ट इस


    Toast.makeText(this,"Message",Toast.LENGTH_SHORT).show(); 

10

की तरह लग रहे जब टुकड़ा में एक टोस्ट कर बनाने निम्नलिखित के रूप में कर देगा:

Toast.makeText(getActivity(),"Message", Toast.LENGTH_SHORT).show();

जब वर्ग टुकड़ा प्रदान कर रहा है यह Getac उपयोग करने के लिए आवश्यक है टिविटी() चूंकि खंड उपclass गतिविधि का है।

Cheerse

+3

फ्रैगमेंट ऑब्जेक्ट का उप-वर्ग है, http://developer.android.com/reference/android/app/Fragment.html देखें, अगर यह गतिविधि का उप-वर्ग था, तो आप – chairam

1

जब एंड्रॉयड टुकड़ा अंदर टोस्ट बुला:

1. Activity mActivity=this.getActivity(); 

2. Toast.makeText(mActivity,"Text you want to display",Toast.LENGTH_SHORT).show(); 

यह मेरे लिए काम करता है।

+0

के बजाय 'इस' का उपयोग कर सकते हैं क्योंकि हम उपयोगकर्ता को देख सकते हैं 'टोस्ट' के समापन के बाद 'शो()' विधि को कॉल न करें। सरल आप टिप्पणी कर सकते हैं। –

-1
 public void onClick(View v) { 
      Context context = v.getContext(); 
      CharSequence text = "Message"; 
      int duration = Toast.LENGTH_SHORT; 
      Toast toast = Toast.makeText(context, text, duration); 
      toast.show(); 
     } 
4

बनाना टुकड़ा अंदर एक टोस्ट

Toast.makeText(getActivity(), "Your Text Here!", Toast.LENGTH_SHORT).show(); 

या

Activity activityObj = this.getActivity(); 

    Toast.makeText(activityObj, "Your Text Here!", Toast.LENGTH_SHORT).show(); 

या

Toast.makeText(this, "Your Text Here!", Toast.LENGTH_SHORT).show(); 
1

आप getActivity साथ वर्तमान गतिविधि प्राप्त कर सकते हैं()

Toast.makeText(getActivity(),"Toast your message" ,Toast.LENGTH_SHORT).show(); 
0

हाय मैंने देखा है कि कुछ उपयोगकर्ताओं को पहले से ही प्रश्न का उत्तर दिया गया है। फिर भी मुझे लगता है कि यह जानकारी एंड्रॉइड प्रोग्रामर के लिए उपयोगी हो सकती है।

अपने एपीआई प्रतिक्रिया पर कभी भी getActivity() या getContext() का उपयोग न करें। क्योंकि यह null हो सकता है अगर एपीआई प्रतिक्रिया आने से पहले आपका टुकड़ा बदल दिया जाता है।

और त्रुटि आता

java.lang.IllegalStateException: Fragment MyFragment{410f6060} not attached to Activity

इसके बजाय टोस्ट को दिखाने के लिए एक आवेदन वर्ग का उपयोग करें।

public class ApplicationContext extends Application { 

/** Instance of the current application. */ 
private static ApplicationContext instance; 

/** 
* Constructor. 
*/ 
public ApplicationContext() { 
    instance = this; 
} 

/** 
* Gets the application context. 
* 
* @return the application context 
*/ 
public static Context getContext() { 
    if (instance == null) { 
     instance = new ApplicationContext(); 
    } 
    return instance; 
} 

/** 
    * display toast message 
    * 
    * @param data 
    */ 
    public static void showToast(String data) { 
     Toast.makeText(getContext(), data, 
       Toast.LENGTH_SHORT).show(); 
    } 

} 

की तरह आप टुकड़ा में Activity instance की जरूरत है तो आप एक base class बनाने के लिए और अपने सभी टुकड़े के साथ विस्तार कर सकते हैं।

public class BaseProjectFragment extends Fragment 

    private BaseProject baseProject; 

    public BaseProject getBaseProject() { 
     if (baseProject == null) baseProject = (BaseProject) getBaseProject(); 
     return baseProject; 
    } 

    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof BaseProject) { 
      baseProject = (BaseProject) context; 
     } 
    } 

और getBaseProject() बजाय getActivity() का उपयोग करें। क्योंकि यह आपको null कभी नहीं देगा।

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