Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

एंड्रॉइड में अपना खुद का लिसनर इंटरफेस कैसे बनाएं?

एंड्रॉइड में कस्टम लिसनर इंटरफेस बनाना

कस्टम इंटरफेस घटकों (फ्रैगमेंट → गतिविधि, व्यू → प्रेजेंटर, एडॉप्टर → फ्रैगमेंट) को अलग करते हैं। यह गाइड एक पुन: प्रयोज्य, नल-सुरक्षित पैटर्न दिखाता है।

चरण 1 - इंटरफेस परिभाषित करें

public interface OnItemActionListener {
    void onItemClick(String itemName, int position);
    void onItemLongClick(String itemName, int position);
}

चरण 2 - इवेंट स्रोत में लागू करें (उदाहरण: फ्रैगमेंट)

public class SourceFragment extends Fragment {

    private OnItemActionListener listener;

    @Override
    public void onAttach(@NonNull Context context) {
        super.onAttach(context);
        if (context instanceof OnItemActionListener) {
            listener = (OnItemActionListener) context;
        } else {
            throw new ClassCastException(context + " को OnItemActionListener लागू करना होगा");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        listener = null; // लीक रोकें
    }

    // आंतरिक रूप से कॉल करें (उदाहरण: बटन क्लिक पर)
    private void notifyClick(String name, int pos) {
        if (listener != null) {
            listener.onItemClick(name, pos);
        }
    }
}

चरण 3 - उपभोक्ता में लागू करें (उदाहरण: गतिविधि)

public class MainActivity extends AppCompatActivity implements OnItemActionListener {

    @Override
    public void onItemClick(String itemName, int position) {
        Toast.makeText(this, "क्लिक किया गया: " + itemName + " @ " + position, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onItemLongClick(String itemName, int position) {
        // संदर्भ मेनू दिखाएं, आदि।
    }
}

वैकल्पिक: सेटर-आधारित पंजीकरण (फ्रैगमेंट-टू-फ्रैगमेंट के लिए)

public class SourceFragment extends Fragment {
    private OnItemActionListener listener;

    public void setOnItemActionListener(OnItemActionListener l) { this.listener = l; }
    // ... notifyClick() में उपयोग करें
}

// पैरेंट/होस्ट में:
SourceFragment src = (SourceFragment) getSupportFragmentManager().findFragmentById(R.id.src);
src.setOnItemActionListener(this::onItemClick); // लैंबडा यदि इंटरफेस फंक्शनल है

सर्वोत्तम अभ्यास

  • इंटरफेस को छोटा रखें — सिंगल-मेथड इंटरफेस लैंब्डा के साथ काम करते हैं (SAM रूपांतरण)।
  • onDetach/onDestroy में नल करें — मेमोरी लीक से बचाता है।
  • नामकरण: On<Event>Listener या <Component>Callback।
  • पैरामीटर: कच्चे व्यू के बजाय डेटा पास करें (डिकॉउपलिंग)।
  • डिफ़ॉल्ट मेथड (Java 8+): वैकल्पिक कॉलबैक के लिए डिफ़ॉल्ट खाली कार्यान्वयन प्रदान करें।

मूल उदाहरण की समीक्षा

दिया गया कोड गतिविधि में सीधे इंटरफेस लागू करता है और onAttach में कास्ट करता है। यह काम करता है लेकिन नल-सुरक्षा, डिटैच क्लीनअप और एकाधिक विधियों की कमी है। ऊपर दिया गया पैटर्न उत्पादन-तैयार है।

परीक्षण

  1. फ्रैगमेंट वाले ऐप पर चलाएं।
  2. फ्रैगमेंट में बटन टैप करें → गतिविधि टोस्ट दिखाती है।
  3. घुमाएं → लिसनर पुनः संलग्न होता है (कोई लीक नहीं)।
  1. एंड्रॉइड ऐप में TextToSpeech कैसे बनाएं? एंड्रॉइड ऐप में TextToSpeech कैसे बनाएं?

    एंड्रॉइड ऐप में टेक्स्ट-टू-स्पीच (TTS) लागू करना यह उदाहरण दिखाता है कि एंड्रॉइड ऐप में TextToSpeech फीचर कैसे जोड़ा जाता है, जिससे ऐप लिखे गए टेक्स्ट को आवाज़ में बदल सके। चरण 1: नया प्रोजेक्ट बनाएं Android Studio खोलें, File → New Project चुनें और आवश्यक विवरण भरकर नया प्रोजेक्ट बनाएं। चरण 2: ले

  1. Facebook पर Android ऐप कैसे बनाएं? Facebook पर Android ऐप कैसे बनाएं?

    Facebook Developer Console पर ऐप बनाकर App ID प्राप्त करने की चरण-दर-चरण प्रक्रिया। चरण 1: Facebook Developer Console पर ऐप बनाएं developers.facebook.com पर जाएं My Apps → Create App चुनें ऐप नाम और ईमेल दर्ज करें Create App ID पर क्लिक करें चरण 2: Android Studio में SDK जोड़ें प्रोजेक्ट-लेवल bu

  1. अपना खुद का Android विजेट कैसे बनाएं अपना खुद का Android विजेट कैसे बनाएं

    विजेट्स ऐप्स के न्यूनतम संस्करण हैं जो सीधे आपके Android होम स्क्रीन पर चलते हैं और आसपास रखने के लिए बेहद व्यावहारिक हो सकते हैं। इन दिनों अधिकांश ऐप्स विजेट सपोर्ट प्रदान करते हैं, और आप उन्हें सीधे अपनी होम स्क्रीन से आसानी से एक्सेस कर सकते हैं। हालांकि, यदि आप उपलब्ध चीज़ों से संतुष्ट नहीं हैं,