Navigation Drawer with backword compatibility android

后端 未结 3 792
借酒劲吻你
借酒劲吻你 2020-11-27 23:16

I am having a application which is having four different activities. Now i want to add a navigation drawer in application to navigates those activities. Can any one give an

3条回答
  •  不知归路
    2020-11-27 23:40

    You need to use appcompact from the Support Library.

    Your activity needs to extend ActionBarActivity.

    In your Activity

     public class MainActivity extends ActionBarActivity {
    

    Import

     import android.support.v7.app.ActionBarActivity;
    

    Instead of getActionBar() use getSupportActionbar()

    Use Them.AppCompact

    Or use ActionBarSherlock library.

    https://stackoverflow.com/questions/20071004/add-icon-in-drawerlist-by-actionbarsherlock/20077469#20077469

    Example:

    MainActivity.java

    public class MainActivity extends ActionBarActivity {
    
        // Fields -----------------------------------------------------------------
        private DrawerLayout drawerLayout;
        private ListView drawerList;
        private ActionBarDrawerToggle drawerToggle;
        private MenuListAdapter menuAdapter;
        private int[] icons;
        private Fragment fragment1;
        private Fragment fragment2;
        private Fragment fragment3;
        private CharSequence drawerTitle;
        private CharSequence title;
        private final String[] titles = new String[]{
                "Title Fragment #1",
                "Title Fragment #2",
                "Title Fragment #3"
        };
        private final String[] subtitles = new String[]{
                "Subtitle Fragment #1",
                "Subtitle Fragment #2",
                "Subtitle Fragment #3"
        };
    
        // Lifecycle Callbacks ----------------------------------------------------
        @Override
        protected void onCreate(Bundle savedInstanceState) {
    
            // Base implemenation
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Instantiate the fragments
            fragment1 = new Fragment1();
            fragment2 = new Fragment2();
            fragment3 = new Fragment3();
    
            // Get the title from this activity
            title = drawerTitle = getTitle();
    
            // Get the icons from the drawables folder
            icons = new int[]{
                    R.drawable.action_about,
                    R.drawable.action_settings,
                    R.drawable.collections_cloud
            };
    
            // Get the drawer layout from the XML file and the ListView inside it
            drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
            drawerList = (ListView)findViewById(R.id.listview_drawer);
    
            // Set a custom shadow over that overlays the main content
            // when the drawer opens
            drawerLayout.setDrawerShadow(
                    R.drawable.drawer_shadow, GravityCompat.START);
    
            // Pass the string arrays to the MenuListAdapter, set the drawer
            // list adapter to it and set up its click listener
            menuAdapter = new MenuListAdapter(
                    MainActivity.this, titles, subtitles, icons);
            drawerList.setAdapter(menuAdapter);
            drawerList.setOnItemClickListener(new DrawerItemClickListener());
    
            // Enable the action bar to have up navigation
            getSupportActionBar().setHomeButtonEnabled(true);
            //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    
            // Allow the the action bar to toggle the drawer
            drawerToggle = new ActionBarDrawerToggle(
                    this,
                    drawerLayout,
                    R.drawable.ic_drawer,
                    R.string.drawer_open,
                    R.string.drawer_close){
    
                public void onDrawerClosed(View view){
                    super.onDrawerClosed(view);
                }
                public void onDrawerOpened(View view){
                    getSupportActionBar().setTitle(drawerTitle);
                    super.onDrawerOpened(view);
                }
            };
            drawerLayout.setDrawerListener(drawerToggle);
    
            // If this is the first time opening this activity,
            // start with loading fragment #1
            if (savedInstanceState == null){
                selectItem(0);
            }       
    
        }
    
        // Methods ----------------------------------------------------------------
        @Override
        public boolean onOptionsItemSelected(MenuItem item){
    
            // If the user has pressed the action bar icon
            if (item.getItemId() == android.R.id.home){
    
                // If the drawer is open, close it; vice versa
                if (drawerLayout.isDrawerOpen(drawerList)){
                    drawerLayout.closeDrawer(drawerList);
                } else {
                    drawerLayout.openDrawer(drawerList);
                }
            }
    
            // Finish by letting the super class do the rest
            return super.onOptionsItemSelected(item);
    
        }
        @Override
        protected void onPostCreate(Bundle savedInstanceState){
    
            // Call the super implementation and synchronize the drawer
            super.onPostCreate(savedInstanceState);
            drawerToggle.syncState();
    
        }
        @Override
        public void onConfigurationChanged(Configuration newConfig){
    
            // Call the super implemenation on this activity
            // and the drawer toggle object
            super.onConfigurationChanged(newConfig);
            drawerToggle.onConfigurationChanged(newConfig);
    
        }
        private void selectItem(int position){
    
            // Create a new fragment transaction and start it
            FragmentTransaction fragTran = getSupportFragmentManager()
                                           .beginTransaction();
    
            // Locate the position selected replace the content view
            // with the fragment of the number selected
            switch (position){
                case 0:{
                    fragTran.replace(R.id.content_frame, fragment1);
                    break;
                }
                case 1:{
                    fragTran.replace(R.id.content_frame, fragment2);
                    break;
                }
                case 2:{
                    fragTran.replace(R.id.content_frame, fragment3);
                    break;
                }
            }
    
            // Commit the transaction and close the drawer
            fragTran.commit();
            drawerList.setItemChecked(position, true);
            drawerLayout.closeDrawer(drawerList);
    
        }
        public void setTitle(CharSequence title){
    
            // Save the passed in title and set the action bar title
            this.title = title;
            getSupportActionBar().setTitle(title);
    
        }
    
        // Classes ----------------------------------------------------------------
        private class DrawerItemClickListener 
        implements ListView.OnItemClickListener{
    
            @Override
            public void onItemClick(
                    AdapterView parent, 
                    View view, 
                    int position,
                    long id) {
    
                // When clicked, select open the appropriate fragment
                selectItem(position);
    
            }
    
        }
    
    }
    

    activity_main.xml

    
    
        
        
    
    
    
    public class MenuListAdapter extends BaseAdapter {
    
        // Fields -----------------------------------------------------------------
        private Context mcontext;
        private String[] titles;
        private String[] subtitles;
        private int[] icons;
        private LayoutInflater inflater;
    
        // Constructor ------------------------------------------------------------
        public MenuListAdapter(
                Context context, 
                String[] titles, 
                String[] subtitles,
                int[] icons){
            mcontext = context;
            this.titles = titles;
            this.subtitles = subtitles;
            this.icons = icons;
            inflater = (LayoutInflater)mcontext.getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
        }
    
        // Accessors --------------------------------------------------------------
        @Override
        public int getCount(){
            return titles.length;
        }
        @Override
        public Object getItem(int position){
            return titles[position];
        }
        @Override
        public long getItemId(int position){
            return position;
        }
    
        // Methods ----------------------------------------------------------------
        public View getView(int position, View convertView, ViewGroup parent){
    
            ViewHolder viewHolder;
    
            // Only inflate the view if convertView is null
            if (convertView == null){
                viewHolder = new ViewHolder();
                if(inflater!=null)
                {
                convertView = inflater.inflate(
                        R.layout.drawer_list_item, parent, false);
                viewHolder.txtTitle = (TextView)convertView.findViewById(
                        R.id.title);
                viewHolder.txtSubtitle = (TextView)convertView.findViewById(
                        R.id.subtitle);
                viewHolder.imgIcon = (ImageView)convertView.findViewById(
                        R.id.icon);
    
                // This is the first time this view has been inflated,
                // so store the view holder in its tag fields
                convertView.setTag(viewHolder);
                }
                else
                {
                    Log.i("........",""+null);
                }
            } else {
                viewHolder = (ViewHolder)convertView.getTag();
            }
    
            // Set the views fields as needed
            viewHolder.txtTitle.setText(titles[position]);
            viewHolder.txtSubtitle.setText(subtitles[position]);
            viewHolder.imgIcon.setImageResource(icons[position]);
    
            return convertView;
        }
    
        // Classes ----------------------------------------------------------------
        static class ViewHolder {
            TextView txtTitle;
            TextView txtSubtitle;
            ImageView imgIcon;
        }
    
    }
    

    drawr_list_item.xml

    
    
    
        
    
        
    
            
            
    
            
    
    
    

    fragment1.xml

    
    
        
    
        
    
    
    

    fragment2.xml

    
    
        
    
    
    

    fragment3.xml

    
    
        
    
    
    

    Fragment1.java

    public class Fragment1 extends Fragment {
        String[] titles={"A","B","C"};
        @Override
        public View onCreateView(
                LayoutInflater inflater, 
                ViewGroup container, 
                Bundle savedInstanceState){
            View rootView = inflater.inflate(R.layout.fragment1, container, false);
            ListView lv = (ListView) rootView.findViewById(R.id.listView1);
            ArrayAdapter adapter = new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,titles);
            lv.setAdapter(adapter);
            return rootView;
        }   
    }
    

    Fragment2.java

    public class Fragment2 extends Fragment {
        @Override
        public View onCreateView(
                LayoutInflater inflater,
                ViewGroup container,
                Bundle savedInstanceState){
            View rootView = inflater.inflate(R.layout.fragment2, container, false);
            return rootView;
        }
    }
    

    Fragment3.java

    public class Fragment3 extends Fragment {
        @Override
        public View onCreateView(
                LayoutInflater inflater,
                ViewGroup container,
                Bundle savedInstanceState){
            View rootView = inflater.inflate(R.layout.fragment3, container, false);
            return rootView;
        }
    }
    

    Add theme in manifest

    android:theme="@style/Theme.AppCompat"
    

    Snap

    enter image description here

提交回复
热议问题