2013-05-10 4 views
6

मेरे पास यह गतिविधि मेरी गतिविधि में है।गतिविधि और टुकड़े के बीच कॉलबैक कैसे करें?

public interface LogoutUser { 
    void logout(); 
} 

मेरे टुकड़ा इस इंटरफेस को लागू करता है, इसलिए मेरे टुकड़ा में, मैं इस है:

@Override 
public void logout() { 
    // logout 
} 

मेरी गतिविधि में मैं

mLogoutUser.logout(); 

फोन कहाँ mLogoutUser प्रकार LogoutUser इंटरफ़ेस की है।

मेरा मुद्दा mLogoutUser ऑब्जेक्ट है जो शून्य है। इसे कैसे शुरू कर सकते हैं?

धन्यवाद!

+1

mLogoutUser = yourFragment; – dymmeh

उत्तर

3

Android Fragments - Communicating with Activity

आप जैसा कि मैंने कहा मेरी टिप्पणी में, मैं इस मुद्दे को मेरी टुकड़ा में onAttach पद्धति का उपयोग करके हल किया है, लेकिन इस में getFragmentById() या getFragmentByTag()

getFragmentManager().findFragmentById(R.id.example_fragment); 
+4

thanx। एक और तरीका एटैच() – androidevil

+0

@androidevil पर उपयोग करने के लिए कैसे है()? – DroidLearner

9

के साथ अपने टुकड़ा के लिए एक संदर्भ प्राप्त करने की आवश्यकता जिस तरह से आपको कॉलबैक फ़ील्ड (इस मामले में mLogoutUser) को खंड में घोषित किया गया है, और इसे इस तरह से प्रारंभ करें:

public class MyFragment extends ListFragment { 
    LogoutUser mLogoutUser; 

    // Container Activity must implement this interface 
    public interface LogoutUser { 
     public void logout(); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 

     // This makes sure that the container activity has implemented 
     // the callback interface. If not, it throws an exception 
     try { 
      mLogoutUser = (LogoutUser) activity; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(activity.toString() 
        + " must implement LogoutUser"); 
     } 
    } 

    ... 
} 

Communicating with Other Fragments में अधिक जानकारी।


लेकिन अगर आपके मामले के क्षेत्र गतिविधि में घोषित है, तो आप अपने श्रोता क्षेत्र इस तरह से प्रारंभ करने में आपकी गतिविधि के अनुसार onAttachFragment विधि का उपयोग कर सकते हैं:

@Override 
public void onAttachFragment(Fragment fragment) { 
    super.onAttachFragment(fragment); 

    mLogoutUser = (LogoutUser) fragment; 
} 

इसके अलावा, आप कर सकते हैं इस संचार को टुकड़ों और गतिविधियों के बीच बनाने के लिए एक ईवेंट बस का उपयोग करें। एक विकल्प स्क्वायर से Otto library है।

+1

धन्यवाद एक टन @androidevil। आपने मेरा दिन बचा लिया! बीटीडब्लू अगर हमारे पास कई टुकड़े संलग्न हैं तो हम आपको (अगर खंडित टुकड़े टुकड़े टुकड़े कर सकते हैं) {} पर अटैचफ्रैगमेंट में। – Kishore

4

गतिविधि

public interface CallBackListener { 
    void onCallBack();// pass any parameter in your onCallBack which you want to return 
} 

को टुकड़ा के कॉलबैक बनाने CallBackFragment.class

public class CallBackFragment extends Fragment { 

    private CallBackListener callBackListener; 

    public CallBackFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 

     return inflater.inflate(R.layout.fragment_call_back, container, false); 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     //getActivity() is fully created in onActivityCreated and instanceOf differentiate it between different Activities 
     if (getActivity() instanceof CallBackListener) 
      callBackListener = (CallBackListener) getActivity(); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 

     Button btn = (Button) view.findViewById(R.id.btn_click); 
     btn.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if(callBackListener != null) 
        callBackListener.onCallBack(); 
      } 
     }); 
    } 
} 

CallbackHandlingActivity.class

के लिए नमूना
+1

बेहद सहायक ... बहुत बहुत धन्यवाद नेपस्टर – JamisonMan111

+0

इस पूर्ण उदाहरण के उत्तर के लिए धन्यवाद! –

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