2014-12-30 17 views
16

मैं एक ऐप बना रहा हूं जो एक नेविगेशन ड्रॉवर में रीसाइक्लिंग व्यू का उपयोग करता है कि रीसाइक्लिंग व्यू की सामग्री कैसे दिखाई नहीं दे रही है। दृश्य निश्चित रूप से उनके रूप में है क्योंकि मैं स्क्रॉल छाया देख सकता हूं। मुझे यकीन नहीं है कि मैंने गलत किया है क्योंकि ऐप दौड़ने पर क्रैश नहीं होता है।रीसाइक्लर व्यू नहीं दिखा रहा है

मार्गदर्शक ड्रॉवर टुकड़ा:

public class NavigationDrawerFragment extends android.support.v4.app.Fragment { 

    public static final String PREF_FILE_NAME = "testPref"; 
    public static final String KEY_USER_LEARNED_DRAWER = "user_learned_drawer"; 
    private RecyclerView mRecyclerView; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private DrawerLayout mDrawerLayout; 
    private View containerView; 
    private Boolean mUserLearnedDrawer; 
    private Boolean mFromSavedInstanceState; 
    private DrawerAdapter adapter; 

    public NavigationDrawerFragment() { 
     mFromSavedInstanceState = false; 
    } 


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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
     mRecyclerView = (RecyclerView) layout.findViewById(R.id.drawerList); 
     adapter = new DrawerAdapter(getActivity(), getData()); 
     mRecyclerView.setAdapter(adapter); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     return layout; 
    } 

    public static List<DrawerRow> getData(){ 
     List<DrawerRow> data = new ArrayList<>(); 
     int icons[] = {R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher}; 
     String titles[] = {"Link 1","Link 2","Link 3","Link 4"}; 
     for (int i = 0 ; i < titles.length && i < icons.length; i++){ 
      DrawerRow current = new DrawerRow(); 
      current.iconId = icons[i]; 
      current.title = titles[i]; 
      data.add(current); 
     } 

     return data; 
    } 

    public void setUp(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) { 
     containerView = getActivity().findViewById(fragmentId); 
     mDrawerLayout = drawerLayout; 
     mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolbar, R.string.drawerOpen, R.string.drawerClosed){ 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       if(!mUserLearnedDrawer){ 
        mUserLearnedDrawer = true; 
        saveToPreferences(getActivity(),KEY_USER_LEARNED_DRAWER, mUserLearnedDrawer+""); 
       } 
       getActivity().invalidateOptionsMenu(); 
      } 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       super.onDrawerClosed(drawerView); 
       getActivity().invalidateOptionsMenu(); 
      } 
     }; 

     if(!mUserLearnedDrawer && !mFromSavedInstanceState){ 
      mDrawerLayout.openDrawer(containerView); 
     } 

     mDrawerLayout.setDrawerListener(mDrawerToggle); 
     mDrawerLayout.post(new Runnable() { 
      @Override 
      public void run() { 
       mDrawerToggle.syncState(); 
      } 
     }); 
    } 

    public void saveToPreferences(Context context, String prefName, String prefValue){ 
     SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 
     SharedPreferences.Editor mEditor = sharedPreferences.edit(); 
     mEditor.putString(prefName, prefValue); 
     mEditor.apply(); 
    } 

    public static String readFromPreferences(Context context, String prefName, String defaultValue){ 
     SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE); 
     return sharedPreferences.getString(prefName,defaultValue); 
    } 
} 

एडाप्टर:

public class DrawerAdapter extends RecyclerView.Adapter<DrawerAdapter.MyViewHolder>{ 

    private LayoutInflater inflator; 
    List<DrawerRow> data = Collections.EMPTY_LIST; 

    public DrawerAdapter(FragmentActivity activity, List<DrawerRow> data) { 
     inflator = LayoutInflater.from(activity); 
     this.data = data; 
    } 


    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { 
     View view = inflator.inflate(R.layout.nav_drawer_row , viewGroup,false); 
     MyViewHolder holder = new MyViewHolder(view); 
     return holder; 
    } 

    @Override 
    public void onBindViewHolder(MyViewHolder viewHolder, int i) { 
     DrawerRow current = data.get(i); 
     viewHolder.title.setText(current.title); 
     viewHolder.icon.setImageResource(current.iconId); 
    } 

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

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

     public MyViewHolder(View itemView) { 
      super(itemView); 
      icon = (ImageView) itemView.findViewById(R.id.list_icon); 
      title = (TextView) itemView.findViewById(R.id.list_text); 
     } 
    } 
} 

दराज पंक्ति:

public class DrawerRow { 
    int iconId; 
    String title; 
} 

लेआउट:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/drawerLayout"> 

    <!--Main Content --> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <include 
      android:id="@+id/app_bar" 
      layout="@layout/app_bar" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="New Text" /> 

    </LinearLayout> 

    <!--Nav Drawer --> 
    <fragment 
     android:layout_width="@dimen/nav_drawer_width" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:name="uk.co.clickcomputing.hhscweatherstation.NavigationDrawerFragment" 
     android:id="@+id/fragment_navigation_drawer"/> 

</android.support.v4.widget.DrawerLayout> 

दराज पंक्ति:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
     android:padding="@dimen/list_padding" 
     android:id="@+id/list_icon" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:src="@drawable/ic_launcher"/> 

    <TextView 
     android:padding="@dimen/list_padding" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center_vertical" 
     android:text="New Text" 
     android:id="@+id/list_text" /> 
</LinearLayout> 

मार्गदर्शक ड्रॉवर टुकड़ा लेआउट:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#eee" 
    android:orientation="vertical"> 

     <ImageView 
      android:layout_width="match_parent" 
      android:layout_height="140dp" 
      android:layout_marginBottom="8dp" 
      android:contentDescription="@string/nav_drawer_img_desciption" 
      android:scaleType="centerCrop" 
      android:src="@drawable/nav_drawer" /> 

     <android.support.v7.widget.RecyclerView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/drawerList"> 

     </android.support.v7.widget.RecyclerView> 
    </LinearLayout> 
+0

क्या आप लेआउट फ़ाइल साझा कर सकते हैं जिसमें RecyclerView शामिल है? मेरा अनुमान है कि आपने सामग्री को लपेटने के लिए चौड़ाई या ऊंचाई सेट की है, जो अभी तक डिफ़ॉल्ट लेआउट प्रबंधकों द्वारा समर्थित नहीं है। – yigit

+0

@yigit लेआउट – cheese12345

+2

के साथ अपडेट किया गया है, जैसा कि मैंने अनुमान लगाया है, आपके पास एंड्रॉइड है: layout_height = "wrap_content" रीसाइक्लिंग व्यू पर जो अभी तक डिफ़ॉल्ट लेआउट प्रबंधकों द्वारा समर्थित नहीं है। आप या तो इसे अपने लेआउट मैनेजर में मेल_पैरेंट पर ओवरराइड कर सकते हैं या माप को ओवरराइड कर सकते हैं और माप स्वयं कर सकते हैं। – yigit

उत्तर

53

मुद्दा यह है कि आप आइटम 0 जो बताता है को दिखाने के लिए कोई भी पंक्ति है कि वहाँ के रूप में गिना लौट रहे है। नीचे दिखाए गए अनुसार आपको सूची का आकार वापस करना चाहिए।

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

शानदार! विश्वास नहीं कर सकता मैं इसे भी याद किया! – Brandon

+1

यह मुझे पागल धन्यवाद दे रहा था! :) –

+0

जब मैं अपना डेटा अपडेट करता हूं तो मुझे यह समस्या थी लिस्ट 'डेटालिस्ट = getMyItems() '। इसके बजाय मैं 'dataList.addAll (getMyItems()) का उपयोग करता हूं;' –

3

मैं मानता हूँ कि आप सही आइटम नंबर वापस जाने के लिए की जरूरत है, लेकिन मुझे लगता है कि आप recycler दृश्य की ऊंचाई के साथ-साथ wrap_content के लिए सेटिंग के साथ एक समस्या हो सकता है। मुझे this लिंक बहुत उपयोगी मिला। आशा करता हूँ की ये काम करेगा।

संबंधित मुद्दे