Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📋 Screens, Lists और Navigation  ·  Lesson 24

Fragments और Fragment Lifecycle

Fragment क्या है?

Fragment screen का reusable हिस्सा है जिसका अपना layout और lifecycle है, और जो Activity के अंदर रहता है। Modern apps एक Activity (toolbar, drawer, bottom bar) रखती हैं और हर screen के लिए fragments बदलती हैं।

MainActivityToolbar · Drawer · Bottom navigationFragmentContainerViewबदलने वाला हिस्साHomeFragment → DetailsFragment → SettingsFragmentएक बार में एक
Single-activity architecture (Student Diary में use)

Fragment बनाइए

File → New → Fragment → Fragment (Blank), फिर इसे इस pattern में साफ़ करें:

Kotlin – HomeFragment.kt
// HomeFragment.kt
class HomeFragment : Fragment() {

    private var _binding: FragmentHomeBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        _binding = FragmentHomeBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        binding.btnDetails.setOnClickListener {
            (requireActivity() as MainActivity).showDetails("Maths")
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
}

Activity में host करें

XML
<!-- activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/fragmentContainer"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />
Kotlin – MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        if (savedInstanceState == null) {             // don't add again after rotation
            supportFragmentManager.commit {
                add(R.id.fragmentContainer, HomeFragment())
            }
        }
    }

    fun showDetails(subject: String) {
        supportFragmentManager.commit {
            setReorderingAllowed(true)
            replace(R.id.fragmentContainer, DetailsFragment.newInstance(subject))
            addToBackStack("details")                 // Back returns to HomeFragment
        }
    }
}

Replace और back stack

MainActivityFragmentManagerBack stackadd(HomeFragment)replace(DetailsFragment) + addToBackStackpush "details"user Back दबाता हैpop → फिर HomeFragment
addToBackStack से Back replace को undo करता है

supportFragmentManager.commit { } fragment-ktx से आता है। Navigation Component (अगला lesson) graph से यह सब आपके लिए करता है।

Arguments भेजें

Kotlin – DetailsFragment.kt
class DetailsFragment : Fragment(R.layout.fragment_details) {   // layout in the constructor

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val binding = FragmentDetailsBinding.bind(view)
        val subject = requireArguments().getString(ARG_SUBJECT) ?: "-"
        binding.tvTitle.text = "Notes of $subject"
    }

    companion object {
        private const val ARG_SUBJECT = "subject"
        fun newInstance(subject: String) = DetailsFragment().apply {
            arguments = bundleOf(ARG_SUBJECT to subject)
        }
    }
}

Fragment lifecycle

onAttach / onCreatefragment object बना, arguments पढ़ेंonCreateViewlayout inflate (_binding = …)onViewCreatedviews, adapters, observers set ✅ main जगहonStart / onResumeदिख रहा और interactiveonPause / onStopscreen छोड़ रहाonDestroyViewview गया (_binding = null) – fragment back stack पर रह सकता हैonDestroy / onDetachfragment गया
View की life fragment से छोटी होती है

Fragments के बीच data share

Kotlin – activityViewModels()
// One ViewModel shared by every fragment of the Activity
class SharedViewModel : ViewModel() {
    val selectedSubject = MutableLiveData<String>()
}

// ListFragment
private val shared: SharedViewModel by activityViewModels()
adapter.onClick = { shared.selectedSubject.value = it.name }

// DetailsFragment
private val shared: SharedViewModel by activityViewModels()
shared.selectedSubject.observe(viewLifecycleOwner) { binding.tvTitle.text = it }

आम गलतियाँ

  • savedInstanceState == null check किए बिना onCreate में fragment add करना → rotation के बाद दो fragments एक के ऊपर एक।
  • onDestroyView के बाद binding use करना → crash।
  • observe(viewLifecycleOwner) की जगह observe(this) → duplicate updates और leaks।
  • Fragment में constructor parameters → recreation पर crash; arguments use करें।

सारांश

  • Fragment = अपने layout + lifecycle वाला screen हिस्सा; एक Activity कई host करती है।
  • Pattern: onCreateView में _binding, onViewCreated में setup, onDestroyView में clear।
  • FragmentManager: add / replace / addToBackStack; bundleOf से arguments।
  • activityViewModels() से data share करें।
✅ Practice

HomeFragment (3 subjects की list) और DetailsFragment वाली app बनाइए। Subject tap करने पर arguments के साथ fragment replace हो; Back से list पर लौटें।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

नई screen के लिए Activity या Fragment?
ज़्यादातर modern apps एक Activity और हर screen के लिए एक Fragment use करती हैं, जो Navigation Component से जुड़े होते हैं। Fragments हल्के होते हैं और toolbar, drawer, bottom navigation share करते हैं।
Fragment में this की जगह viewLifecycleOwner क्यों?
Fragment अपने view से ज़्यादा देर ज़िंदा रह सकता है (जैसे back stack पर)। viewLifecycleOwner से observe करने पर view destroy होते ही updates रुक जाते हैं, जिससे crashes और leaks नहीं होते।
क्या fragment का parameters वाला constructor हो सकता है?
नहीं। Android fragments को empty constructor से दोबारा बनाता है। Data arguments (Bundle) से भेजें।
← Android Tutorial (Kotlin)
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

अगला topicNavigation Component और Safe Args आपकी प्रगति: 24 / 43 (56%) · Lesson 25 / 43 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें