Here is source code of the Program to Demonstrate Navigation Using Fragments in Android. The program is successfully compiled and run on a Windows system using Eclipse Ide. The program output is also shown below.
Here i demonstrate navigation drawer along with fragments in Android , fragments are extremely useful because a fragment is an independent component which can be used by an activity. A fragment encapsulates functionality so that it is easier to reuse within activities and layouts.A fragment also make it easy to reuse components in different layouts. In this following code the Class_Fragment can be used again and again to show a different layout each time.
Main Activity
package com.example.navigation_drawer1; import android.annotation.SuppressLint; import android.app.Activity; import android.content.res.Configuration; import android.os.Bundle; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.widget.DrawerLayout; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; @SuppressLint("NewApi") public class MainActivity extends Activity { private String[] titles; private DrawerLayout layout_drawer; private ListView drawer_content; private ActionBarDrawerToggle action_bar_toggle; private CharSequence title; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); title = getActionBar().getTitle(); titles = getResources().getStringArray(R.array.operating_systems); layout_drawer = (DrawerLayout) findViewById(R.id.drawer_layout); drawer_content = (ListView) findViewById(R.id.left_drawer); drawer_content.setAdapter(new ArrayAdapter<String>(this, R.layout.fragment_layout, R.id.textView_fragment, titles)); drawer_content.setOnItemClickListener(new DrawerItemClickListener()); action_bar_toggle = new ActionBarDrawerToggle(this, /* Main Activity */ layout_drawer, /* layput for navigation drawer */ R.drawable.ic_drawer, R.string.drawer_open, /* on open drawer */ R.string.drawer_close /* on close drawer */) { public void onDrawerClosed(View view) { getActionBar().setTitle(title); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle("Open Drawer"); } }; layout_drawer.setDrawerListener(action_bar_toggle); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); } private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { selectItem(position); } } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); action_bar_toggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); action_bar_toggle.onConfigurationChanged(newConfig); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (action_bar_toggle.onOptionsItemSelected(item)) { return true; } switch (item.getItemId()) { case R.id.action_settings: Toast.makeText(this, "settings", Toast.LENGTH_LONG).show(); break; default: break; } return super.onOptionsItemSelected(item); } private void selectItem(int position) { Class_Fragment fragment = new Class_Fragment(); Bundle args = new Bundle(); args.putInt(Class_Fragment.ARG_OS, position); fragment.setArguments(args); android.app.FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.content_frame, fragment).commit(); drawer_content.setItemChecked(position, true); getActionBar().setTitle((titles[position])); layout_drawer.closeDrawer(drawer_content); } }
Class_Fragment
package com.example.navigation_drawer1; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; class Class_Fragment extends Fragment { public static final String ARG_OS = "OS"; private String string; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_layout, null); TextView textView = (TextView) view .findViewById(R.id.textView_fragment); textView.setText(string); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public void setArguments(Bundle args) { string = args.getString(ARG_OS); } }
The array operating_systems that is being used is defined in Strings.xml , include the following code here also.
Strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">Navigation_Drawer1</string> <string name="action_settings">Settings</string> <string name="action_update">Update</string> <string name="drawer_open">Open Drawer</string> <string name="drawer_close">Close Drawer</string> <string name="hello_world">Hello world!</string> <string-array name="operating_systems"> <item>Android</item> <item>iPhone</item> <item>Windows Mobile</item> <item>Linux </item> <item>Windows 7.0</item> <item>Windows 8.0</item> <item>Windows 8.1</item> <item>Chrome OS</item> <item>Unix</item> <item>Symbian</item> </string-array> </resources>