Recycler视图不显示项目 - Android studio

时间:2015-06-27 23:43:56

标签: android xml android-recyclerview android-navigation

我正在制作一个应用程序,其中包含一个导航抽屉和一个回收者视图。但是,回收器视图中的项目未显示。我不确定我做错了什么。我会提供我所拥有的。如果您需要什么,请询问。感谢

适配器

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>

1 个答案:

答案 0 :(得分:2)

您应该更改此方法以返回实际的项目数

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