Fragment Android में एक पुन: प्रयोज्य UI घटक है जो Activity में एम्बेड किया जाता है और FragmentManager के माध्यम से प्रबंधित किया जाता है। प्रत्येक फ़्रैगमेंट का अपना जीवनचक्र, layout और स्थिति होती है। Fragment विभिन्न स्क्रीन आकारों के अनुकूलन और कोड पुन: उपयोग को सरल बनाता है। Google की आधिकारिक मार्गदर्शिका में और पढ़ें।
मुख्य बातें
Fragment एक मॉड्यूलर Android उपयोगकर्ता इंटरफ़ेस घटक है जो Activity के अंदर स्क्रीन के एक भाग का प्रतिनिधित्व करता है। Fragment अपना स्वयं का layout प्रबंधित कर सकता है, जीवनचक्र घटनाओं को संभाल सकता है और अपनी स्थिति सहेज सकता है। मॉड्यूलरिटी के कारण, एक फ़्रैगमेंट का उपयोग विभिन्न Activities और विभिन्न उपकरणों पर किया जा सकता है।
Fragment API Android 3.0 (Honeycomb, API 11) में 2011 में टैबलेट समर्थन के लिए दिखाई दी। इससे पहले, डेवलपर्स को फ़ोन और टैबलेट के लिए अलग-अलग Activity बनानी पड़ती थीं। Fragment ने स्वतंत्र ब्लॉकों से स्क्रीन बनाना संभव बनाया। 2019 में, Google ने API 4 तक पिछड़ी संगतता के साथ Jetpack Fragment लाइब्रेरी जारी की।
Google (2026) के अनुसार, Google Play में 80% ऐप किसी न किसी रूप में Fragment का उपयोग करते हैं। Jetpack Fragment लाइब्रेरी को Google Play Services के माध्यम से 10 बिलियन से अधिक बार डाउनलोड किया गया है। Fragment Jetpack Compose के युग में भी Android आर्किटेक्चर का एक प्रमुख घटक बना हुआ है।
Fragment का जीवनचक्र Activity की तुलना में अधिक जटिल है क्योंकि यह होस्ट Activity की स्थिति पर निर्भर करता है। Fragment Activity के समान अवस्थाओं से गुज़रता है लेकिन अपने स्वयं के कॉलबैक जोड़ता है: onAttach, onCreateView, onViewCreated, onActivityCreated, onDestroyView, onDetach।
| Fragment कॉलबैक | Activity समतुल्य | उद्देश्य |
|---|---|---|
| onAttach | onCreate से पहले | Fragment Activity से जुड़ा |
| onCreate | onCreate | गैर-UI डेटा का आरंभीकरण |
| onCreateView | onCreate | inflater के माध्यम से layout बनाना |
| onViewCreated | onCreate | व्यू बनने के बाद UI तत्वों को बांधना |
| onDestroyView | onDestroy | व्यू हटाना, UI संसाधन मुक्त करना |
| onDetach | onDestroy | Fragment Activity से अलग हुआ |
Fragment जीवनचक्र का मुख्य अंतर onCreate और onDestroy के बीच onCreateView और onDestroyView का आह्वान है। Fragment बिना UI के मौजूद हो सकता है (यदि onCreateView null लौटाता है)। Activity के पुनर्निर्माण के बाद, FragmentManager स्वचालित रूप से फ़्रैगमेंट को पुनर्स्थापित करता है।
FragmentManager Activity में फ़्रैगमेंट प्रबंधित करने के लिए केंद्रीय क्लास है। यह फ़्रैगमेंट जोड़ने, हटाने, बदलने, बैक स्टैक प्रबंधित करने और स्थिति पुनर्स्थापित करने का कार्य करता है। FragmentManager supportFragmentManager (AndroidX) या fragmentManager (पुरानी API) के माध्यम से उपलब्ध है।
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// फ़्रैगमेंट अभी तक नहीं जोड़ा गया — बना रहे हैं
if (savedInstanceState == null) {
val transaction = this.supportFragmentManager
.beginTransaction()
transaction.add(R.id.fragment_container, ListFragment())
transaction.addToBackStack(null)
transaction.commit()
}
}
fun replaceFragment(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.fragment_container, fragment)
.addToBackStack(null)
.commit()
}
}FragmentTransaction लेन-देन परमाणु होते हैं। commit() अगले Looper चक्र पर निष्पादन निर्धारित करता है। तत्काल निष्पादन के लिए commitNow() का उपयोग करें। addToBackStack(null) लेन-देन को बैक स्टैक में जोड़ता है — बैक बटन संक्रिया को पूर्ववत करेगा।
Kotlin में एक उदाहरण के साथ Fragment जीवनचक्र की प्रमुख विधियों को देखें। onCreateView एक layout बनाता है — Activity के विपरीत, विधि को एक View लौटाना होता है। onViewCreated इसके तुरंत बाद कॉल किया जाता है, यहाँ id द्वारा तत्व ढूँढना सुरक्षित है। onDestroyView व्यू संदर्भ साफ़ करने का अंतिम क्षण है।
class DetailFragment : Fragment() {
private var _binding: FragmentDetailBinding? = null
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentDetailBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.textTitle.setText("विवरण")
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}View Binding पैटर्न _binding/binding के साथ सुनिश्चित करता है कि onDestroyView के बाद layout संदर्भ शून्य हो जाता है। व्यू नष्ट होने के बाद binding तक पहुँचने से NullPointerException होगी। इस पैटर्न की Google सभी फ़्रैगमेंट के लिए अनुशंसा करता है।
फ़्रैगमेंट के बीच डेटा स्थानांतरण के लिए Android कई तंत्र प्रदान करता है। सबसे विश्वसनीय एक साझा ViewModel है, जो एक Activity के फ़्रैगमेंट के बीच साझा किया जाता है। Fragment Result API एकल घटनाओं के लिए उपयुक्त है। Bundle तर्क फ़्रैगमेंट बनाते समय डेटा के लिए हैं।
// दो फ़्रैगमेंट के लिए साझा ViewModel
class SharedViewModel : ViewModel() {
private val _selectedItem = MutableLiveData<Item>()
val selectedItem: LiveData<Item> = _selectedItem
fun select(item: Item) { _selectedItem.setValue(item) }
}
// फ़्रैगमेंट A: Fragment Result API के माध्यम से घटना भेजता है
setFragmentResult("request_key", bundleOf("key" to "value"))
// फ़्रैगमेंट B: घटना प्राप्त करता है
childFragmentManager.setFragmentResultListener("request_key", this) { requestKey, bundle ->
val value = bundle.getString("key")
}Fragment Result API (Fragment 1.3.0 में जोड़ा गया) पदावनत setTargetFragment/onActivityResult को बदलता है। API टाइप-सुरक्षित है, Bundle का उपयोग करता है, और प्राप्तकर्ता के ज्ञान की आवश्यकता नहीं है। Parent FragmentManager फ़्रैगमेंट के बीच मध्यस्थ के रूप में कार्य करता है।
Fragment और Activity के बीच चुनाव एप्लिकेशन आर्किटेक्चर पर निर्भर करता है। Fragment अनुकूली लेआउट (फ़ोन + टैबलेट), कस्टम ट्रांज़िशन एनिमेशन और Jetpack Navigation के उपयोग के लिए अनिवार्य है। Activity एक या दो स्क्रीन वाले सरल ऐप के लिए बेहतर है।
| मानदंड | Fragment | Activity |
|---|---|---|
| निर्माण गति | तेज़ (हल्का घटक) | धीमी (सिस्टम प्रक्रिया) |
| पुन: उपयोग | उच्च (एक Fragment विभिन्न Activities में) | निम्न (प्रत्येक स्क्रीन की अपनी Activity) |
| संक्रमण एनिमेशन | लचीला (FragmentTransaction) | सीमित (overridePendingTransition) |
| घुमाने पर संरक्षण | स्वचालित (प्रबंधक पुनर्स्थापित करता है) | मैन्युअल (onSaveInstanceState) |
| Deep Links | Navigation Component के माध्यम से | intent-filter के माध्यम से मूल समर्थन |
Fragment के साथ काम करने का आधुनिक दृष्टिकोण Jetpack Navigation Component है, जो मैन्युअल FragmentManager प्रबंधन को बदलता है। लाइब्रेरी NavGraph (XML नेविगेशन ग्राफ़), NavHostFragment और टाइप-सुरक्षित डेटा स्थानांतरण के लिए Safe Args प्रदान करती है।
Jetpack Fragment लाइब्रेरी (androidx.fragment:fragment-ktx) में FragmentResult API, DialogFragment, BottomSheetDialogFragment और Lifecycle-aware घटकों के साथ एकीकरण शामिल है। 2026 से, Google Fragment का उपयोग केवल Jetpack Navigation के माध्यम से करने की अनुशंसा करता है, सीधे नहीं।
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:startDestination="@+id/listFragment">
<fragment
android:id="@+id/listFragment"
android:name=".ListFragment"
android:label="सूची">
<action
android:id="@+id/action_list_to_detail"
app:destination="@+id/detailFragment" />
</fragment>
<fragment
android:id="@+id/detailFragment"
android:name=".DetailFragment"
android:label="विवरण" />
</navigation>अक्सर पूछे जाने वाले प्रश्न
FragmentManager एक क्लास है जो फ़्रैगमेंट लेन-देन का प्रबंधन करता है। यह Activity कंटेनर में फ़्रैगमेंट जोड़ता, हटाता और बदलता है। FragmentManager Activity पुनर्निर्माण पर फ़्रैगमेंट स्थिति पुनर्स्थापित करता है और बैक स्टैक का प्रबंधन करता है।
Fragment Activity के अंदर UI का एक हिस्सा है, यह स्वतंत्र रूप से मौजूद नहीं रह सकता। Fragment स्क्रीन घुमाने पर Activity पुनर्निर्माण से बच जाता है। Activity अपने स्वयं के Lifecycle वाली एक पूर्ण स्क्रीन है, Fragment Activity के Lifecycle पर निर्भर करता है।
Fragment — जब स्क्रीन में कई स्वतंत्र ब्लॉक हों (टैब, मास्टर-डिटेल, टैबलेट अनुकूलन)। Activity — जब स्क्रीन में दोहराए जाने योग्य ब्लॉक न हों। Google Single Activity + एकाधिक Fragment की अनुशंसा करता है।
तीन तरीके: मूल Activity के माध्यम से (साझा ViewModel), Fragment Result API (setFragmentResult) के माध्यम से, Fragment बनाते समय Bundle तर्कों के माध्यम से। ViewModel पसंदीदा तरीका है क्योंकि डेटा पुनर्निर्माण के दौरान संरक्षित रहता है।
Fragment Transaction एक परमाणु संक्रिया है जो फ़्रैगमेंट सेट को बदलती है। FragmentManager.beginTransaction() एक लेन-देन खोलता है जिसमें add, remove, replace, hide, show कॉल किया जा सकता है। प्रत्येक लेन-देन commit() या commitNow() के साथ समाप्त होता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें