सवाल RecyclerCreateViewHolder या ऑनबिंड व्यू पर कॉल नहीं कर रहा है


कोई त्रुटि नहीं मिल रही है और सभी डेटा मान्य लगता है। किसी कारण से, दृश्य से संबंधित तरीकों के निदेशक को बुलाया जा रहा है। मैंने निम्नलिखित के बारे में सुनिश्चित किया है:

  • getItemCount () एकमात्र एडाप्टर विधि कहा जा रहा है और एक सकारात्मक पूर्णांक मान लौटा रहा है, (मुझे पता है कि यह वह क्षेत्र होगा जहां आप लोग देखेंगे)

    • निर्माता को बुलाया जा रहा है, सदस्य चर मान्य हैं।

    • अभिभावक दृश्य एक लंबवत रैखिक स्तर है; कोई स्क्रॉलव्यू नहीं, या दृष्टि में अपनी स्क्रॉल गुणों के साथ कोई अन्य दृश्य।

    • जिसमें खंड दृश्य बनाया गया है और स्क्रीन पर दिखाया गया है।

एडाप्टर के बाद खंड में घोषणा यहां दी गई है। किसी भी मदद की सराहना की जाएगी क्योंकि यह पूरी तरह से परेशान है।

SubMenuAdapter adapter = new SubMenuAdapter(getActivity(), mContentItems);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);
public class SubMenuAdapter extends RecyclerView.Adapter<SubMenuAdapter.ViewHolder> {
private static final String TAG = String.format("==> %S", SubMenuAdapter.class.getSimpleName());

private final List<ContentItem> mContentItems;
private Context mContext;

public SubMenuAdapter(Context context, List<ContentItem> contenItems) {
    Log.d(TAG, "Constructor called");
    mContentItems = contenItems;
    mContext = context;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Log.d(TAG, "onCreateViewHolder called");
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_resource_efficiency, parent, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Log.d(TAG, "onBindViewHolder called");

    ContentItem item = mContentItems.get(position);
    holder.textName.setText(item.getName());
    FontSetter.setMyriadProRegular(mContext, holder.textName);
    Picasso.with(mContext).load("file://" + item.getPreviewImageDefault()).into(holder.imageIcon);
}

@Override
public int getItemCount() {
    Log.d(mContext, String.format("getItemCount: %d", mContentItems.size()));
    return mContentItems.size();
}

// ViewHolder
public static class ViewHolder extends RecyclerView.ViewHolder {

    TextView textName;
    ImageView imageIcon;

    public ViewHolder(View view) {
        super(view);
        textName = (TextView) view.findViewById(R.id.tv_resource_efficiency_option);
        imageIcon = (ImageView) view.findViewById(R.id.iv_resource_efficiency_icon);
    }
}

44
2018-03-11 17:06


मूल


मैंने 'match_parent', 'wrap_content' और 400dp का आकार, सभी को नीली पृष्ठभूमि मान के साथ और अभी भी कुछ भी नहीं करने की कोशिश की। मैं स्पष्ट रूप से दृश्यता को दृश्यता भी सेट करता हूं - अभी भी कुछ भी नहीं। हालांकि मैं इसे किसी भी तरह प्रकट होने की उम्मीद नहीं कर रहा था क्योंकि विचारों को बनाने और बांधने के तरीकों को बुलाया नहीं गया था। - Conti
मेरे पास एक ही समस्या है, एडाप्टर में डेटा बदल गया है, अधिसूचित करेंडेटाट चेंज कहा जाता है, सेट एडाप्टर निष्पादित, जीवित जीवित और खींचा गया है, लेकिन क्रिएटिव्यूहोल्डर या ऑनबिंड व्यू पर कॉल नहीं किया गया। सभी veiws दिखाई देते हैं। - Raskilas
मुझे वही समस्या है जो मेरे एडाप्टर विधि getItemCount () 0 से अधिक लौटाता है और अभी भी सकारात्मक परिणाम नहीं है। मुझे लगता है कि SrollView और RecycleView के साथ काम करने में समस्याएं हैं। - Sniper
यह मेरे साथ भी हो रहा है। अजीब बात यह है कि मेरे पास एक ही प्रोजेक्ट में एक और रीसाइक्लर व्यू है जो पूरी तरह से काम कर रहा है। - Martin Epsz
@IgorGanapolsky मुझे अपने बिटबकेट के माध्यम से खोजना होगा और इसे ढूंढना होगा, मैंने 7 महीने पहले इस प्रश्न को प्रस्तुत किया था और उस पर घंटों खर्च करने के बाद छोड़ दिया था। लेकिन मेरे तीसरे बुलेट बिंदु की जांच करें, "अभिभावक दृश्य एक लंबवत रैखिक स्तर है; कोई स्क्रॉलव्यू नहीं है, या किसी अन्य दृश्य को अपनी स्क्रॉल गुणों के साथ दृष्टि में।" पदानुक्रम में कोई स्क्रॉलव्यू नहीं थे। - Conti


जवाब:


यह किसी की भी मदद कर सकता है

पहला उपयोग

recyclerView.setAdapter(adapter);

और तब:

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

तो यह इस तरह दिखेगा:

recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

आदेश उलट दिया गया है


64
2018-03-04 17:59



केवल एक चीज जो काम करती है - styler1972
क्या आपके पास स्पष्टीकरण का कोई लिंक है कि यह इस तरह क्यों होना चाहिए? - igoris
हाय @igoris दुख की बात है कि मैं नहीं, मैं केवल परीक्षण और त्रुटि से इस समाधान के लिए मिला है। - Aerim
इसके कामकाजी धन्यवाद @ एरिम - Anand Phadke


सुनिश्चित करें कि आप रीसायकल व्यू nestedscrollview से बच्चे नहीं हैं

उदाहरण के लिए, यह कोड काम नहीं करेगा।

<android.support.v4.widget.NestedScrollView
    android:id="@+id/responder_scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/darkGray"
    android:clipToPadding="false"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="24dp"
            app:cardElevation="@dimen/spacing_medium"
            app:cardUseCompatPadding="true">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/responder_testimonial"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentTop="true"
                    android:text="Testimonial"
                    android:textSize="@dimen/general_font_size" />

                <TextView
                    android:id="@+id/responder_counter_testimonial"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_toRightOf="@+id/responder_testimonial"
                    android:text="170"
                    android:textSize="@dimen/general_font_size_small" />

                <Button
                    android:id="@+id/responder_btn_testimonial"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentRight="true"
                    android:layout_alignParentTop="true"
                    android:text="Go" />

               <view
                    android:id="@+id/responder_list_testimonial"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_below="@+id/responder_testimonial"
                    class="android.support.v7.widget.RecyclerView"/>
            </RelativeLayout>
        </android.support.v7.widget.CardView>

    </FrameLayout>
</android.support.v4.widget.NestedScrollView>

तो मैं उपयोग करता हूँ,

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<view
    android:id="@+id/responder_list_testimonial"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/responder_testimonial"
    class="android.support.v7.widget.RecyclerView"/>


18
2017-10-12 09:49



दरअसल यह समस्या मेरे RecyclerView को स्क्रॉलव्यू में घोंसला करके मेरे कारण हुई थी। इसे हल करने के लिए, मैंने अपने RecyclerView पर कस्टम लेआउटमैनेजर सेट किया है। - Igor Ganapolsky
हाय, हाँ आपका अधिकार, मैं कस्टम लेआउट मैनेजर का भी उपयोग करता हूं - raditya gumay
मैंने इस पर हमेशा के लिए बिताया। मैं इस समस्या में भाग गया, भले ही मेरा रीसाइक्लिंग दृश्य स्क्रॉलव्यू या नेस्टेड स्क्रॉलव्यू का प्रत्यक्ष बच्चा नहीं था। क्या यह एक ज्ञात बग या सिर्फ डिजाइन द्वारा है? - startoftext
मैं बिल्कुल नहीं जानता। लेकिन अगर आप नेस्टड्सक्रॉलव्यू का उपयोग करना चाहते हैं, तो आपको इसके अंदर एक दृश्य का भी उपयोग करना चाहिए। - raditya gumay
Contrarwise, NestedScrollView के साथ स्क्रॉलव्यू को प्रतिस्थापित किया गया और कोड काम करने के लिए शुरू होता है (स्क्रॉलव्यू> LinearLayout> RecyclerView)। वैसे भी, आपकी मदद से - Vassiliy Vorobyov


एक घंटे से अधिक का जवाब पीछा कर रहे थे।

अपने एडाप्टर को सेट करने से पहले इस लाइनर को कॉल करना न भूलें।

recyclerView.setLayoutManager(new LinearLayoutManager(this));

ऐसा लगता है कि रीसाइक्लिंग व्यू में डिफॉल्ट लेआउट मैनेजर विकल्प नहीं है, इसलिए हमें इसे प्रोग्रामिक रूप से जोड़ना होगा।

चीयर्स अगर आपको यह उपयोगी लगता है।


14
2017-12-26 02:36



ओह! मै भूल गया। धन्यवाद! +1 - avisper
@avisper खुशी है कि यह आपके अंत में काम किया। - ralphgabb
मुझे भी। धन्यवाद! - Utsav Gupta
हाँ मैं इसे भूल गया, और पूरे दिन कोशिश की, अंत में आपके जवाब ने मुझे पार करने में मदद की। - krishna murthy
महसूस कर रहा है कि महसूस कर रहा है, और कोड के सिर्फ एक पंक्ति टुकड़े में हल किया। खुशी है कि यह मदद करता है। - ralphgabb


मुझे नहीं पता कि यह किसी के लिए सहायक होगा, लेकिन मुझे लगभग एक ही सटीक समस्या थी। मेरी समस्या या तो खंड / वर्ग और न ही रीसाइक्लिंग एडाप्टर में थी। समस्या मूल एक्सएमएल लेआउट में थी जहां एक्शनबार लिया गया था match_parent जहां FrameLayout जिसमें खंड बदल दिया गया है- दिखाया जाने वाला कोई भी उपलब्ध स्थान नहीं मिला। यही कारण है कि विधियों को बुलाया नहीं गया था।

मुझे लगता है कि इसी तरह के परिदृश्य एक ही समस्या का सामना करने वालों के लिए मामला हो सकता है। प्रत्येक एक्सएमएल फ़ाइल में प्रत्येक चौड़ाई और ऊंचाई को दो बार जांचें, उसी पेड़ में हो सकता है, क्योंकि समस्या एडाप्टर में बिल्कुल प्रतीत नहीं होती है।


11
2018-02-17 11:49



तुमने मुझे बचाया!! बिल्कुल वही काम कर रहा था - nikhil
खुशी है मेरे जवाब में मदद की - Abdul-Rahman Ahmad
आप अब्दुल-रहमान की मदद करते हैं !! - Jon Zangitu


मेरे दो पेनी यहाँ। बस इसे डिबग करने में तीन घंटे से ज्यादा समय बिताया।

सुनिश्चित करें कि आपने लापरवाही से निम्नलिखित पंक्ति का उपयोग नहीं किया है।

recyclerView.setHasFixedSize(true);

निश्चित आकार को केवल तभी सेट करें जब आप सुनिश्चित हों कि दृश्य का निरंतर आकार होगा। यदि ऐसा नहीं है, तो ऑनक्रेट व्यूहोल्डर और ऑनबिंड व्यू विधियों को बिल्कुल कॉल नहीं किया जा सकता है।


5
2018-02-05 16:16



बहुत बहुत धन्यवाद। यह मेरे लिए काम किया। इसके अलावा, एक ही जवाब का उल्लेख किया यहाँ - venky
मदद करने में खुशी :) - Venkatesh Shukla
मैं हर जगह की तलाश में हूं। और समस्या बिल्कुल ठीक थी! - Gabriel


मुझे भी उसी मुद्दे का सामना करना पड़ा था onCreateViewHolder या onBindView विधि केवल आह्वान नहीं कर रही थी getItemCount आह्वान किया जा रहा था। तो यह मूल रूप से ऊंचाई और वजन के साथ जारी किया गया था RecyclerView जो सेट किया गया था wrap_content या 0dp। कुछ मूल्यों में इसे बदलने के बाद समस्या ठीक हो गई।


4
2018-06-12 09:08





मुझे पता है कि यह विषय पुराना है, लेकिन यदि आपने वही शिक्षार्थी गलती की है, जैसा मैंने किया था, तो आपको यह सहायक मिल सकता है।

चूंकि मैं रीसाइक्लर व्यू के बारे में कुछ वेबसाइट पर पढ़ रहा था और कुछ कोड कॉपी कर रहा था और मेरे संदर्भ में अनुकूलन कर रहा हूं, मैंने अलग-अलग चर (जैसे उपयोगकर्ता और डेटा) बनाए हैं जो कि एक ही काम करने के लिए थे, सिवाय कुछ विधियां डेटा कॉल कर रही थीं और कुछ उपयोगकर्ता को कॉल कर रहे थे । यह एक आसान गलती है क्योंकि आप दूसरे कोड और जावा कार्यक्षमता को समझने की कोशिश करते हैं (यह हर समय मेरे साथ होता है)।

यह जानना अच्छा है कि आप अपने जावा कोड में कहीं भी अपने कंसोल में प्रिंटल कर सकते हैं, ताकि आप इसे आसानी से डीबग कर सकें।

सौभाग्य!


1
2017-07-16 00:20





मेरे मामले में यह setHasStableIds (सत्य) का उपयोग कर रहा था; एडाप्टर में जबकि कुछ सूची आइटम getItemID () में -1 लौट रहे थे, इसलिए मुझे लगता है कि RecyclerView सोच रहा था कि वे बराबर हैं।


1
2018-02-02 13:57



धन्यवाद! इस पर कई घंटे बर्बाद कर दिया। onBindViewHolder कभी-कभी फोन नहीं किया जाता था। मेरे मामले में मैंने गलत तरीके से setHasStableIds (सत्य) जोड़ा; एडाप्टर के कन्स्ट्रक्टर में। - CoolMind