2015-01-07 14 views
72

फोन नहीं मेरे RecyclerView फोन नहीं करता है onCreateViewHolder, onBindViewHolder भी MenuViewHolder निर्माता है, इसलिए कुछ भी नहीं RecyclerView में दिखाई देता है। मैंने डीबगिंग के लिए लॉग डाला, और कोई लॉग दिखाया नहीं गया है। समस्या क्या हो सकती है?Recyclerview onCreateViewHolder

मेरे अनुकूलक:

public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> { 
private LayoutInflater inflater; 
List<Menu> data = Collections.emptyList(); 

public MenuAdapter(Context context, List<Menu> data) { 
    Log.i("DEBUG", "Constructor"); 
    inflater = LayoutInflater.from(context); 
    Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString()); 
    this.data = data; 
    for(Menu menu: this.data){ 
     Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu); 
    } 
} 

@Override 
public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = inflater.inflate(R.layout.row_menu, parent, false); 
    MenuViewHolder holder = new MenuViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(MenuViewHolder holder, int position) { 
    Log.i("DEBUG MENU", "onBindViewHolder"); 
    Menu current = data.get(position); 
    holder.title.setText(current.menu); 
} 

@Override 
public int getItemCount() { 
    return 0; 
} 

class MenuViewHolder extends RecyclerView.ViewHolder { 
    TextView title; 
    ImageView icon; 

    public MenuViewHolder(View itemView) { 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.menuText); 
    } 
} 

मेरे कस्टम पंक्ति एक्सएमएल:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/menuText" 
    android:text="Dummy Text" 
    android:layout_gravity="center_vertical" 
    android:textColor="#222"/> 

और मेरे टुकड़ा:

public NavigationFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false")); 
    if (savedInstanceState != null) { 
     mFromSavedInstaceState = true; 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

    View view = inflater.inflate(R.layout.fragment_navigation, container, false); 
    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list); 
    MenuAdapter adapter = new MenuAdapter(getActivity(), getData()); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    recyclerView.setAdapter(adapter); 
    return view; 
} 
+0

आप रीसाइक्लर व्यू.सेट एडाप्टर क्यों सेट करते हैं (एडैप TER); 2 बार? –

उत्तर

143

आपका getItemCount विधि returns 0। तो RecyclerView कभी भी दृश्य को तुरंत चालू करने का प्रयास नहीं करता है। इसे greater than 0 कुछ वापस करें।

+11

ओह भगवान, मुझे अभी इतना मूर्ख लगता है! : facepalm: इसके लिए धन्यवाद! –

+2

मैंने अभी एक घंटे खो दिया क्योंकि GetItemCount अन्य सभी कोड से नीचे था और मैंने इसे नहीं देखा। : | – Joel

+0

मेरे पास एक कस्टम एडाप्टर था और मेरे आइटम का आकार मेरे संग्रह के आकार में सेट करना भूल गया था – Dooie

7

एफडब्ल्यूआईडब्ल्यू, मैंने इसे देखा जब मैंने से पहले रीसाइक्लर व्यू एडाप्टर सेट किया था, तो एडाप्टर वास्तव में प्रारंभ किया गया था।

recycler.setLayoutManager(new LinearLayoutManager(this)); 
249

एक और एक साथ बुलाया गया था बनाने के लिए था आप RecyclerView लिए लेआउट प्रबंधक सेट करना है। यदि ऊंचाई wrap-content है, तो RecyclerView दिखाई नहीं देगी।

+10

ओह हां, मुझे वही याद आया। आरवी हजार बार बना है पता नहीं कैसे मैं इसे याद किया। – shivamDev

+0

recycler.setLayoutManager (नया LinearLayoutManager (getActivity()) में getActivity() पास करना; ठीक काम करता है। क्योंकि संदर्भ को LinearLayoutManger (संदर्भ संदर्भ) में पास करने की आवश्यकता है .और, मुझे लगता है कि इस कीवर्ड का उपयोग करके हम एक टुकड़े में संदर्भ नहीं प्राप्त कर सकते हैं। क्या यह सही है? –

+2

आधा दिन brainf ** के बाद मुझे यह मिला, धन्यवाद! – norbDEV

3

custom.xml या RecyclerView में TextView की ऊंचाई निर्धारित करना: समाधान सुनिश्चित करें recyclerView.setAdapter(adapter) एक गैर-शून्य एडाप्टर

3

यह तब हुआ जब मेरा RecyclerViewScrollView के अंदर था और मैं एंड्रॉइड सपोर्ट लाइब्रेरी 23.0 का उपयोग कर रहा था। ठीक करने के लिए, मैं Android समर्थन लाइब्रेरी 23.2 के लिए अद्यतन:

build.gradle में:

dependencies { 
    ... 
    compile 'com.android.support:appcompat-v7:23.2.+' 
    compile 'com.android.support:cardview-v7:23.2.+' 
} 
5

यह आपके मामले में आने लागू नहीं होता। लेकिन यह किसी और की मदद कर सकता है।

यही कारण निम्न विधि

recyclerView.setHasFixedSize(true); 

सावधानी के साथ प्रयोग नहीं करते हैं के लापरवाह उपयोग किया जा सकता है, इस कारण हो सकता है onBindView और onCreateViewHolder, सब पर नहीं कहा जा करने के लिए लॉग में कोई त्रुटि के साथ।

1

कोड के नीचे की तरह RecyclerView लिए लेआउट प्रबंधक सेट करें:

RecyclerView recyclerView = (RecyclerView) findViewById (R.id.recycler_view_right); नेविगेशन एडाप्टर एडाप्टर = नया नेविगेशन एडाप्टर (यह, FragmentDrawer.getData()); रीसाइक्लर व्यू.सेट एडाप्टर (एडाप्टर); रीसाइक्लर व्यू.सेट लयआउट प्रबंधक (नया लीनियरलाउट मैनेजर (यह));

0

मेरे मामले में मैंने अपने रीसाइक्लिंग व्यू की आईडी को "रीसाइक्लिंग व्यू" पर सेट किया है। ऐसा लगता है कि यह आईडी पहले ही परिभाषित की गई थी, क्योंकि जब मैंने इसे अलग-अलग आईडी में बदल दिया, तो एडाप्टर के तरीकों को ठीक से बुलाया गया।

0

अन्य विकल्प है यदि आप प्राप्त का उपयोग कर objetc इस सूची भेजने के लिए, यह सत्यापित करें कि आप सही संदर्भ है, उदाहरण के

private list<objetc> listObjetc; 
//Incorrect 
public void setListObjetcs(list<objetc> listObjetc){ 
    listObjetc = listObjetc; 
} 

//Correct 
public void setListObjetcs(list<objetc> listObjetc){ 
    this.listObjetc = listObjetc; 
} 
0

के लिए एक कस्टम अनुकूलक का उपयोग कर अपने संग्रह के आकार के ITEMCOUNT सेट करने के लिए मत भूलना तो है ।

2

मुझे एक ही समस्या थी, क्योंकि मैं लेआउट संसाधन में android.support.constraint.ConstraintLayout का उपयोग कर रहा था। FrameLayout में बदलकर मदद मिली।

0

मेरे मामले में, मेरी सूची का आकार 0 था और यह क्रिएटिव्यूहोल्डर विधि को कॉल नहीं कर रहा था। मुझे प्लेसहोल्डर के रूप में खाली सूची के लिए केंद्र में एक संदेश प्रदर्शित करने की आवश्यकता थी, इसलिए मैंने इसे ऐसा किया और यह आकर्षण की तरह काम करता था। @ कॉन्स्टेंटिन बुरोव द्वारा उत्तर में मदद मिली।

@Override 
public int getItemCount() { 
    if (contactList.size() == 0) { 
     return 1; 
    } else { 
     return contactList.size(); 
    } 
} 
0

मैंने कई घंटों तक इस मुद्दे से संघर्ष किया। मैं एक टुकड़ा का उपयोग कर रहा था। और यह मुद्दा view वापस नहीं कर रहा था।

ProductGridBinding binding = DataBindingUtil.inflate(inflater, R.layout.product_grid, container, false); 



    mLinearLayoutManager = new LinearLayoutManager(getActivity()); 
    mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 

    binding.rvNumbers.setHasFixedSize(true); 
    binding.rvNumbers.setLayoutManager(mLinearLayoutManager); 
    binding.rvNumbers.setAdapter(adapter); 


    View view = binding.getRoot(); 


    return view; 
0

कृपया निम्नलिखित बात

@Override 
public int getItemCount() { 
    return data.size(); 
} 
2

आपका एडाप्टर कक्षा

@Override 
    public int getItemCount() { 
     return mDataset.size(); 
    } 
+0

कोड-केवल उत्तर समुदाय के लिए उपयोगी नहीं हैं – JimHawkins

5

को यह जोड़े मैं मैं जोड़ने यह मेरे लिए काम किया के बाद रेखा से नीचे जोड़ने के लिए भूल गया कार्य करें: नीचे मेरी कोड है

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