• 给Drawer菜单的ListView加点小图标吧

    Adapter扩展
    服务器君一共花费 33.089 ms 进行了 4 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    也许你会觉得,光溜溜的文字菜单会有点单调,能不能在前面加一点图标什么的点缀一下呢?可以的。

    我们这里就讲一下如何对 NavigationDrawer 进行功能性的扩展,比如…… 加图标,先给个演示效果吧:

    如何实现这样的效果呢?通过适配器是一个不错的方法。

    在 NavigationDrawerFragment.java 里面我们可以找到这么一段代码:

    // 给抽屉ListView绑定一个适配器
    mDrawerListView.setAdapter(new ArrayAdapter<String>(
    	getActionBar().getThemedContext(),
    	android.R.layout.simple_list_item_activated_1,
    	android.R.id.text1,
    	new String[]{
    			getString(R.string.title_section1),
    			getString(R.string.title_section2),
    			getString(R.string.title_section3),
    			getString(R.string.title_section4),
    			getString(R.string.title_section5),
    	}));
    

    这段代码实现了什么功能呢?就是从 strings.xml 里面获取菜单项,然后绑到 ListView 上。如果想实现更多功能,我们可以自行扩展这个适配器,比如:

    package net.nowamagic.adapter;
    
    import android.content.Context;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.LayoutInflater;
    import android.widget.BaseAdapter;
    import android.widget.TextView;
    
    import net.nowamagic.magicapp_v7.R;
    
    public class DrawerAdapter extends BaseAdapter {
    	
    	private Context mContext;
    	private String[] mTitles;
    	
    	public DrawerAdapter(Context context){
            mContext = context;
            mTitles = new String[]{
            		context.getResources().getString(R.string.title_section1),
                    context.getResources().getString(R.string.title_section2),
                    context.getResources().getString(R.string.title_section3),
                    context.getResources().getString(R.string.title_section4),
                    context.getResources().getString(R.string.title_section5),
            };
        }
    
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return mTitles.length;
    	}
    
    	@Override
    	public String getItem(int position) {
    		// TODO Auto-generated method stub
    		return mTitles[position];
    	}
    	
    	@Override
    	public long getItemId(int position) {
    		// TODO Auto-generated method stub
    		return position;
    	}
    	
    	public int getIconId(int position) {
            switch (position){
                case 0:
                    return R.drawable.ic_menu_today;
                case 1:
                    return R.drawable.ic_menu_view;
                case 2:
                    return R.drawable.ic_menu_star;
                case 3:
                    return R.drawable.ic_menu_notifications;
                case 4:
                    return R.drawable.ic_menu_preferences;
                default:
                    return 0;
            }
        }
    
    	@Override
    	public View getView(int position, View convertView, ViewGroup parent) {
            TextView item = (TextView) convertView;
            if(item == null){
                item = (TextView) LayoutInflater.from(mContext).inflate(R.layout.view_drawer_item, null);
            }
            item.setText(getItem(position));
            item.setCompoundDrawablesWithIntrinsicBounds(getIconId(position), 0, 0, 0);
            return item;
        }
    
    }
    

    通过编写 getIconId 方法,强行把小图标绑到 ListView 项前。调用很简单:

    mDrawerListView.setAdapter(new DrawerAdapter(getActivity()));
    

    完成。

    Adapter 适配器还有更广泛的使用,后面再一起慢慢领略。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [软件工程与项目管理] 了解一点WebKit 9 个条目
  2. [Python程序设计] Python Web部署的背景知识 9 个条目
  3. [Linux操作系统] 基本 Linux Shell 命令 2 个条目
  4. [Python程序设计] 写几个简单的Tornado程序吧 5 个条目
  5. [移动开发] 从代码角度去认识 Handler 4 个条目
  6. [软件工程与项目管理] 开始使用Git 3 个条目
  7. [Python程序设计] Django模板系统 11 个条目
  8. [Python程序设计] Django数据库模型 6 个条目
  9. [C语言程序设计] C语言里的全局变量 2 个条目
  10. [移动开发] Android抽屉导航NavigationDrawer 5 个条目
  11. [移动开发] Content Provider内容提供者 3 个条目
  12. [计算机算法] TAOCP与算法 12 个条目
窗口 -- [博客]