2015-06-27 127 views
0

我正在製作一個應用程序,其中包含導航抽屜和回收器視圖。但是,回收站視圖內的項目未顯示。我不確定我做錯了什麼。我會提供我所擁有的。如果您需要任何東西,請詢問。感謝Recycler view not displayed items-Android studio

適配器

public class Adapter extends RecyclerView.Adapter<Adapter.MyViewHolder> { 
private LayoutInflater inflater; 
List<Information> data = Collections.emptyList(); 
public Adapter(Context context, List<Information> data){ 
    inflater=LayoutInflater.from(context); 
    this.data=data; 
} 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int i) { 
    View view = inflater.inflate(R.layout.custom_row, parent, false); 
    MyViewHolder holder= new MyViewHolder(view); 
    return holder; 

} 

@Override 
public void onBindViewHolder(MyViewHolder viewHolder, int i) { 
    Information 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{ 
    TextView title; 
    ImageView icon; 
    public MyViewHolder(View itemView) { 
     super(itemView); 
     title = (TextView) itemView.findViewById(R.id.listText); 
     icon = (ImageView) itemView.findViewById(R.id.listIcon); 


    } 
} 

} 

信息

public class Information { 
int iconId; 
String title; 
} 

NavigationDrawerFragment

public class NavigationDrawerFragment extends Fragment { 
private RecyclerView recyclerView; 
public static final String PREF_FILE_NAME = "testpref"; 
public static final String KEY_USER_LEARNED_DRAWER = "user_learned_drawer"; 
private ActionBarDrawerToggle mDrawerToggle; 
private DrawerLayout mDrawerLayout; 
private boolean mUserLearnedDrawer; 
private View containerView; 
private Adapter adapter; 
private boolean mFromSavedInstanceState; 
public NavigationDrawerFragment() { 
    // 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) 
    { 
     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); 
    recyclerView=(RecyclerView) layout.findViewById(R.id.drawerList); 
    adapter = new Adapter(getActivity(),getData()); 
    recyclerView.setAdapter(adapter); 
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
    return layout; 
} 

public static List<Information> getData(){ 
    List<Information> data = new ArrayList<>(); 
    int[] icons={R.drawable.thechefhat,R.drawable.thegrocerybasket,R.drawable.favouritesstar,R.drawable.supported}; 
    String[] titles = {"Recipes","Ingredients","Favourites","Help"}; 
    for(int i=0;i<titles.length&&i<icons.length;i++){ 
     Information current = new Information(); 
     current.iconId=icons[i]; 
     current.title = titles[i]; 
     data.add(current); 
    } 
    return data; 
} 
public void setUp(int fragmentID, DrawerLayout drawerLayout, final Toolbar toolbar) { 
    containerView =getActivity().findViewById(fragmentID); 
    mDrawerLayout=drawerLayout; 
    mDrawerToggle = new ActionBarDrawerToggle(getActivity(),drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close){ 
     @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(); 

     } 

     @Override 
     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 
      if(slideOffset<0.6) 
       toolbar.setAlpha(1-slideOffset); 
     } 
    }; 
    if(!mUserLearnedDrawer&&!mFromSavedInstanceState){ 
     mDrawerLayout.openDrawer(containerView); 

    } 


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



} 
public static void saveToPreferences(Context context,String preferenceName, String preferenceValue){ 
    SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME,Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor=sharedPreferences.edit(); 
    editor.putString(preferenceName,preferenceValue); 
    editor.apply(); 
} 
public static String readFrompreferences(Context context, String preferenceName, String defaultValue){ 
    SharedPreferences sharedPreferences=context.getSharedPreferences(PREF_FILE_NAME,Context.MODE_PRIVATE); 
    return sharedPreferences.getString(preferenceName,defaultValue); 
} 


} 

主要活動

public class MainActivity extends AppCompatActivity { 
Toolbar toolbar; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 


    toolbar = (Toolbar)findViewById(R.id.app_bar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment) 
      getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
    drawerFragment.setUp(R.id.fragment_navigation_drawer,(DrawerLayout)findViewById(R.id.drawer_Layout), toolbar); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
} 

custom_row.xml

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

<ImageView 
    android:padding="8dp" 
    android:id="@+id/listIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:src="@drawable/supported" 


    /> 

<TextView 
    android:id="@+id/listText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Dummy Text" 
    android:padding="8dp" 

    android:layout_gravity="center_vertical" /> 
</LinearLayout> 

fragment_navigation_drawer.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@color/lightPrimaryColor" 
tools:context="com.example.ivan.tutorialapp.NavigationDrawerFragment"> 

<LinearLayout 
    android:id="@+id/containerDrawerImage" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <ImageView 

     android:layout_width="280dp" 
     android:layout_height="140dp" 
     android:layout_marginBottom="16dp" 
     android:src="@drawable/banner" /> 

</LinearLayout> 

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

</android.support.v7.widget.RecyclerView> 

</RelativeLayout> 

custom_row.xml

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

<ImageView 
    android:padding="8dp" 
    android:id="@+id/listIcon" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:src="@drawable/supported" 


    /> 

<TextView 
    android:id="@+id/listText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Dummy Text" 
    android:padding="8dp" 

    android:layout_gravity="center_vertical" /> 
</LinearLayout> 

activity_main.xml中

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_Layout" 
android:layout_width="match_parent" 
android:fitsSystemWindows="true" 
android:layout_height="match_parent"> 

<RelativeLayout 
    android:fitsSystemWindows="true" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.ivan.tutorialapp.MainActivity"> 

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

    </include> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/app_bar" 
     android:text="@string/hello_world" 
     /> 

</RelativeLayout> 

<fragment 
    android:id="@+id/fragment_navigation_drawer" 
    android:name="com.example.ivan.tutorialapp.NavigationDrawerFragment" 
    android:layout_width="280dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:layout="@layout/fragment_navigation_drawer" 
    tools:layout="@layout/fragment_navigation_drawer"> 

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

回答

2

你應該查nge此方法返回實際物品計數

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

這是正確答案,使其返回data.size(); –