android - Fragment में findViewById




android-fragments android-imageview (20)

मैं एक फ्रेगमेंट में एक इमेज व्यू बनाने की कोशिश कर रहा हूं जो छविव्यू तत्व को संदर्भित करेगा जिसे मैंने एक्सएमएल में फ्रैगमेंट के लिए बनाया है। हालांकि, findViewById विधि केवल तभी काम करती है जब मैं एक गतिविधि वर्ग का विस्तार करता हूं। क्या वैसे भी मैं इसका उपयोग फ्रैगमेंट में भी कर सकता हूं?

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        ImageView imageView = (ImageView)findViewById(R.id.my_image);
        return inflater.inflate(R.layout.testclassfragment, container, false);
    }
}

findViewById विधि में एक त्रुटि है जो बताती है कि विधि अपरिभाषित है।


1) अपनी लेआउट फ़ाइल घोषित करें।

public View onCreateView(LayoutInflater inflater,ViewGroup container, 
                                 Bundle savedInstanceState) {
    return inflate(R.layout.myfragment, container, false);
}

2) फिर, अपने विचार की आईडी प्राप्त करें

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    TextView nameView = (TextView) view.findViewById(R.id.textview1);
}

1) पहले फ्रैगमेंट के लेआउट को बढ़ाएं तो आप findviewbyId का उपयोग कर सकते हैं।

View view = inflater.inflate(R.layout.testclassfragment, container, false);
             ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
             return view;

आप findViewById() को उस गतिविधि ऑब्जेक्ट के साथ कॉल कर सकते हैं findViewById() आप अपने public void onAttach(Activity activity) भीतर अपने फ्रैगमेंट के अंदर public void onAttach(Activity activity) विधि में प्राप्त करते हैं।

उदाहरण के लिए गतिविधि को एक चर में सहेजें:

टुकड़ा वर्ग में : private Activity mainActivity; onAttach() विधि में: this.mainActivity=activity;

अंत में vairable के माध्यम से प्रत्येक findViewById निष्पादित करें: mainActivity.findViewById(R.id.TextView);


आप इसे onActivityCreated विधि में भी कर सकते हैं।

public void onActivityCreated(Bundle savedInstanceState) { 
      super.onActivityCreated(savedInstanceState);
}

जैसे वे यहां करते हैं: http://developer.android.com/reference/android/app/Fragment.html

getView().findViewById(R.id.foo);

तथा

getActivity().findViewById(R.id.foo);

संभव है


आपको दृश्य को फुला देना है

public class TestClass extends Fragment {

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.testclassfragment, container, false);
    ImageView imageView = (ImageView)v.findViewById(R.id.my_image);
    return v
}}

आपको फ्रैगमेंट के दृश्य को बढ़ाने और इसे देखने के लिए findViewById() को कॉल करने की findViewById() है।

public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container, 
                         Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.testclassfragment, container, false);
     ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
     return view;
}

इसे लागू करने का सबसे अच्छा तरीका निम्नानुसार है:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

rootView = inflater.inflate(R.layout.testclassfragment, container, false);
        ImageView imageView = (ImageView) rootView.findViewById(R.id.my_image);
        return rootView
}

इस तरह, rootView का उपयोग xml लेआउट में परिभाषित प्रत्येक नियंत्रण के लिए किया जा सकता है और कोड इस तरह से अधिक क्लीनर है।

उम्मीद है की यह मदद करेगा :)


उपयोग

imagebutton = (ImageButton) getActivity().findViewById(R.id.imagebutton1);

imageview = (ImageView) getActivity().findViewById(R.id.imageview1);

यह काम करेगा


ऐसी चीजों का उपयोग करने का सबसे आसान तरीका मक्खन का उपयोग करना है इसके द्वारा आप नीचे दिए गए अनुसार @OnClick () द्वारा कई ऑनक्लिस्कीलिस्टर्स जोड़ सकते हैं:

public class TestClass extends Fragment {
    @BindView(R.id.my_image) ImageView imageView;
    @OnClick(R.id.my_image)
    public void my_image_click(){
        yourMethod();
    }
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.testclassfragment, container, false);
        ButterKnife.bind(getActivity,view);
        return view;
    }
}

कोशिश करो यह मेरे लिए काम करता है

public class TestClass extends Fragment {
    private ImageView imageView;

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.testclassfragment, container, false);
        findViews(view);
        return view;
    }

    private void findViews(View view) {
        imageView = (ImageView) view.findViewById(R.id.my_image);
    }
}

ग्रेडल कंकाल प्लगइन का उपयोग करें, यह स्वचालित रूप से आपके लेआउट के संदर्भ के साथ व्यू धारक कक्षाएं उत्पन्न करेगा।

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        MyLayout myLayout = new MyLayout(inflater, container, false);
        myLayout.myImage.setImageResource(R.drawable.myImage);
        return myLayout.view;
    }
}

अब मान लें कि आपके पास my_layout.xml फ़ाइल में एक ImageView घोषित किया गया है, यह स्वचालित रूप से आपके लिए MyLayout क्लास उत्पन्न करेगा।


टुकड़ों में हमें उस खिड़की के दृश्य की आवश्यकता है ताकि हम इस टुकड़े की एक क्रिएटिव व्यू बना सकें।

फिर दृश्य देखें और उस दृश्य तत्वों की प्रत्येक दृश्य आईडी तक पहुंचने के लिए इसका उपयोग करें ..

  class Demo extends Fragment
    {
        @Override
        public View onCreateView(final LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState)
        {
            View view =inflater.inflate(R.layout.demo_fragment, container,false);
            ImageView imageview=(ImageView)view.findViewById(R.id.imageview1);

            return view;
        }
    }

पहले खंड दृश्य प्राप्त करें और फिर इस दृश्य से अपना ImageView प्राप्त करें।

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.testclassfragment, container, false);
    ImageView imageView = (ImageView) view.findViewById(R.id.my_image);
    return view;
}

प्रयत्न

private View myFragmentView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
myFragmentView = inflater.inflate(R.layout.myLayoutId, container, false);
myView = myFragmentView.findViewById(R.id.myIdTag)
return myFragmentView;
}

लेआउट inflater यहाँ तस्वीर में आता है। लेआउट inflater एक वर्ग है जो हमें जावा कोड में एक्सएमएल विचारों का उपयोग करने में सक्षम बनाता है। तो आप निम्न कोड के साथ चर v में रूट xml व्यू को फुला सकते हैं। और फिर वी का उपयोग करके, आप मूल दृश्य v के बच्चे के दृश्य देख सकते हैं।

public class TestClass extends Fragment {
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.testclassfragment, container, false);
    ImageView imageView = (ImageView)v.findViewById(R.id.my_image);
    return v;
    }
}

विधि getView () ऑनक्रेट और इसी तरह के तरीकों के बाहर टुकड़ों पर काम नहीं करेगा।

आपके पास दो तरीके हैं, कार्य को ऑनक्रेट पर देखने के लिए पास करें (इसका अर्थ यह है कि दृश्य केवल तभी बनाया जा सकता है जब दृश्य बनाया जा रहा हो) या दृश्य को चर के रूप में सेट करें:

private View rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_contatos, container, false);
}

public void doSomething () {
    ImageView thumbnail = (ImageView) rootView.findViewById(R.id.someId);
}

getView() या व्यू पैरामीटर का उपयोग onViewCreated विधि को लागू करने से करें। यह खंड के लिए रूट व्यू देता है (जिसे onCreateView() विधि द्वारा लौटाया जाता है) । इसके साथ आप findViewById() को कॉल कर सकते हैं।

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    ImageView imageView = (ImageView) getView().findViewById(R.id.foo);
    // or  (ImageView) view.findViewById(R.id.foo); 

जैसा कि getView() केवल getView() बाद काम करता है, आप इसे getView() onCreate() या onCreateView() तरीकों के अंदर उपयोग नहीं कर सकते हैं


Fragment क्लास के अंदर आपको onViewCreated() ओवरराइड विधि मिल onViewCreated() जहां आपको हमेशा इस तरीके के रूप में अपने विचारों को प्रारंभ करना चाहिए, आपको दृश्य ऑब्जेक्ट मिलता है जिसका उपयोग आप अपने विचारों को ढूंढ सकते हैं:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    view.findViewById(R.id.yourId).setOnClickListener(this);

    // or
    getActivity().findViewById(R.id.yourId).setOnClickListener(this);
}

Fragment के मामले में हमेशा याद रखें कि onViewCreated() विधि स्वचालित रूप से नहीं onViewCreated() यदि आप onViewCreated() या super.onCreateView() को onViewCreated() विधि से वापस कर रहे हैं। डिफ़ॉल्ट रूप से ListFragment FrameLayout रूप में ListFragment मामले में ListFragment डिफ़ॉल्ट रूप से कॉल किया जाएगा।

नोट: आप getView() एक बार getView() को सफलतापूर्वक निष्पादित कर getView() , तो कक्षा में कहीं भी खंड दृश्य प्राप्त कर सकते हैं। अर्थात

getView().findViewById("your view id");

getView() रूट व्यू देगा

View v = getView().findViewByID(R.id.x); 

EditText name = (EditText) getView().findViewById(R.id.editText1);
EditText add = (EditText) getView().findViewById(R.id.editText2);  






findviewbyid