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

फ्रैगमेंट में findViewById का उपयोग कैसे करें?

फ्रैगमेंट में findViewById - सही पैटर्न

एक फ्रैगमेंट का व्यू पदानुक्रम onCreateView में बनाया जाता है। व्यू को **उसी व्यू पर** खोजें जिसे आप इन्फ्लेट करते हैं, गतिविधि पर नहीं।

सही पैटर्न

public class MyFragment extends Fragment {

    private TextView textView;
    private Button button;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        // 1. लेआउट इन्फ्लेट करें
        View rootView = inflater.inflate(R.layout.fragment_my, container, false);

        // 2. rootView पर व्यू खोजें (गतिविधि पर नहीं!)
        textView = rootView.findViewById(R.id.textView);
        button = rootView.findViewById(R.id.button);

        // 3. लिसनर सेट करें, आदि।
        button.setOnClickListener(v -> textView.setText("क्लिक किया गया!"));

        // 4. रूट व्यू वापस करें
        return rootView;
    }

    // वैकल्पिक: व्यू नष्ट होने पर नल करें (लीक से बचाता है)
    @Override
    public void onDestroyView() {
        super.onDestroyView();
        textView = null;
        button = null;
    }
}

आम गलतियां

गलतक्यों गलत हैसही
getActivity().findViewById(R.id.x) फ्रैगमेंट मेंगतिविधि के लेआउट को खोजता है, फ्रैगमेंट के नहीं; NPE या गलत व्यू लौटाता हैrootView.findViewById(R.id.x)
findViewById(R.id.x) फ्रैगमेंट में (कोई रिसीवर नहीं)फ्रैगमेंट में यह विधि नहीं है (केवल गतिविधि/व्यू में)rootView.findViewById(...) या requireView().findViewById(...)
फील्ड में व्यू स्टोर करना और onDestroyView में साफ़ न करनाफ्रैगमेंट व्यू नष्ट होने के बाद लीक होता है (उदाहरण: बैक स्टैक)onDestroyView में नल करें
onCreate में व्यू एक्सेस करनाव्यू पदानुक्रम अभी तक मौजूद नहीं हैonCreateView या onViewCreated का उपयोग करें

आधुनिक विकल्प: View Binding (अनुशंसित)

// build.gradle में सक्षम करें:
android {
    buildFeatures { viewBinding = true }
}

// फ्रैगमेंट में:
private FragmentMyBinding binding;

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater,
                         @Nullable ViewGroup container,
                         @Nullable Bundle savedInstanceState) {
    binding = FragmentMyBinding.inflate(inflater, container, false);
    binding.button.setOnClickListener(v -> binding.textView.setText("क्लिक किया गया!"));
    return binding.getRoot();
}

@Override
public void onDestroyView() {
    super.onDestroyView();
    binding = null; // बाइंडिंग नल करें
}

View Binding के लाभ

  • प्रकार-सुरक्षित, कास्टिंग नहीं, findViewById कॉल नहीं।
  • कॉम्पाइल-टाइम जांच — लेआउट में गलत ID = बिल्ड त्रुटि।
  • स्वचालित नल-सुरक्षा (बाइंडिंग नल करने योग्य नहीं)।

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

मूल कोड root.findViewById(R.id.text) का सही ढंग से उपयोग करता था लेकिन onDestroyView क्लीनअप, व्यू बाइंडिंग, और नल-सुरक्षा की कमी थी। ऊपर दिए गए पैटर्न आधुनिक मानक हैं।

  1. एंड्रॉइड में ViewFlipper का उपयोग कैसे करें? एंड्रॉइड में ViewFlipper का उपयोग कैसे करें?

    एंड्रॉइड में ViewFlipper के साथ व्यू फ्लिपिंग एनिमेशन यह ट्यूटोरियल ViewFlipper का उपयोग करके व्यूज़ के बीच एनिमेटेड ट्रांजिशन बनाने का तरीका दिखाता है, जिसमें ऑटो-फ्लिपिंग और मैनुअल नेविगेशन शामिल है। लेआउट (activity_main.xml) <RelativeLayout xmlns:android=https://schemas.android.com/apk/res/an

  1. Android में Snackbar का उपयोग कैसे करें? Android में Snackbar का उपयोग कैसे करें?

    परिचय Snackbar Material Design का एक घटक है जो स्क्रीन के निचले भाग में एक संक्षिप्त संदेश दिखाता है। यह उदाहरण Snackbar के बुनियादी उपयोग और अनुकूलन को दर्शाता है। चरण 1: नया प्रोजेक्ट बनाएं Android Studio में नया प्रोजेक्ट बनाएं। चरण 2: लेआउट XML res/layout/activity_main.xml: <?xml version=1.

  1. Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें? Android में NavigationView (नेविगेशन ड्रॉअर) कैसे उपयोग करें?

    परिचय NavigationView मटेरियल डिज़ाइन का साइड नेविगेशन ड्रॉअर (हैमबर्गर मेनू) है। यह DrawerLayout के अंदर होता है और मेनू आइटम्स, हेडर, और नेविगेशन हैंडलिंग प्रदान करता है। यह ट्यूटोरियल Navigation Components के साथ आधुनिक सेटअप दिखाता है। आवश्यक चरण चरण 1: नया प्रोजेक्ट बनाएं Android Studio में Fi