Android NavigationView – Fragments With RecyclerView Tutroial and Example.
- We want to switch through our fragments using a NavigationView.
- If you click a NavigationItem,we take you to the corresponding fragment.
- Each fragment has a recyclerview.
- Each RecyclerView will have its own unique dataset.
The full source code is available for download above.You can also have a look at the video at the bottom of this page for complete step by step explanation.
Project Structure
Here’s teh project structure.
App Level Build.gradle
These are our dependencies in our app level build.gradle :
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:24.2.0' compile 'com.android.support:design:24.2.0' compile 'com.android.support:cardview-v7:24.2.0' }
Our Fragments
This is one of the fragments we are using.All other fragments exist in this format :
package com.tutorials.hp.navviewrecyclerview.mFragments; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.tutorials.hp.navviewrecyclerview.R; import com.tutorials.hp.navviewrecyclerview.mRecycler.MyAdapter; public class InterGalactic extends Fragment { private RecyclerView rv; private static String[] spacecrafts={"Pioneer","Voyager","Casini","Spirit","Challenger"}; public static InterGalactic newInstance() { return new InterGalactic(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView=inflater.inflate(R.layout.intergalactic,null); //REFERENCE rv= (RecyclerView) rootView.findViewById(R.id.intergalactic_RV); //LAYOUT MANAGER rv.setLayoutManager(new LinearLayoutManager(getActivity())); //ADAPTER rv.setAdapter(new MyAdapter(getActivity(),spacecrafts)); return rootView; } @Override public String toString() { return "InterGalactic"; } }
MyAdapter
Then we have our recyclerView adapter as below :
package com.tutorials.hp.navviewrecyclerview.mRecycler; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.tutorials.hp.navviewrecyclerview.R; public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RecyclerVH> { Context c; String[] spacecrafts; public MyAdapter(Context c, String[] spacecrafts) { this.c = c; this.spacecrafts = spacecrafts; } @Override public RecyclerVH onCreateViewHolder(ViewGroup parent, int viewType) { View v= LayoutInflater.from(c).inflate(R.layout.model,parent,false); return new RecyclerVH(v); } @Override public void onBindViewHolder(RecyclerVH holder, int position) { holder.nameTxt.setText(spacecrafts[position]); } @Override public int getItemCount() { return spacecrafts.length; } /* VIEWHOLDER CLASS */ public class RecyclerVH extends RecyclerView.ViewHolder { TextView nameTxt; public RecyclerVH(View itemView) { super(itemView); nameTxt= (TextView) itemView.findViewById(R.id.nameTxt); } } }
MainActivity.java
We have our MainActivity class :
package com.tutorials.hp.navviewrecyclerview; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.view.View; import android.support.design.widget.NavigationView; import android.support.v4.view.GravityCompat; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.ActionBarDrawerToggle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import com.tutorials.hp.navviewrecyclerview.mFragments.InterGalactic; import com.tutorials.hp.navviewrecyclerview.mFragments.InterPlanetary; import com.tutorials.hp.navviewrecyclerview.mFragments.InterStellar; import com.tutorials.hp.navviewrecyclerview.mFragments.InterUniverse; public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); //REFERENCE DRAWER,TOGGLE ITS INDICATOR DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); ActionBarDrawerToggle toggle = new ActionBarDrawerToggle( this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); drawer.addDrawerListener(toggle); toggle.syncState(); //REFERNCE NAV VIEW AND ATTACH ITS ITEM SELECTION LISTENER NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); } //CLOSE DRAWER WHEN BACK BTN IS CLICKED,IF OPEN @Override public void onBackPressed() { DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); if (drawer.isDrawerOpen(GravityCompat.START)) { drawer.closeDrawer(GravityCompat.START); } else { super.onBackPressed(); } } //RAISED WHEN NAV VIEW ITEM IS SELECTED @SuppressWarnings("StatementWithEmptyBody") @Override public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); //OPEN APPROPRIATE FRAGMENT WHEN NAV ITEM IS SELECTED if (id == R.id.interplanetary) { //PERFORM TRANSACTION TO REPLACE CONTAINER WITH FRAGMENT MainActivity.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, InterPlanetary.newInstance()).commit(); } else if (id == R.id.interstellar) { MainActivity.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, InterStellar.newInstance()).commit(); } else if (id == R.id.intergalactic) { MainActivity.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, InterGalactic.newInstance()).commit(); } else if (id == R.id.interuniverse) { MainActivity.this.getSupportFragmentManager().beginTransaction().replace(R.id.containerID, InterUniverse.newInstance()).commit(); } else if (id == R.id.nav_share) { } else if (id == R.id.nav_send) { } //REFERENCE AND CLOSE DRAWER LAYOUT DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; } }
Code Download
Download the code here:
Resource | Link |
---|---|
GitHub | Download |
YouTube | Watch |