0

我正在尝试使用带有 hashmap 的 simpleadapter 构建 navigationDrawer Android 菜单。

这是我的代码:我不知道如何为每个项目检索 txt 和 img 的值来构建我的导航抽屉菜单的每个项目。

你能看看我的代码吗?

我知道可以使用这些行来做到这一点:

SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), listinfo, R.layout.drawer_list_item, from, to);
mDrawerList.setAdapter(adapter); 

但我需要实现 getView 以便为每个项目设置 TypeFace。

    String[] names = new String[]{
                "Home",
                "International",
                "National",
                "High Tech",
                "Sports",
                };

        /*Array of Images*/
        int[] image = new int[] {
                R.drawable.ic_action_home,
                R.drawable.ic_action_globe,
                R.drawable.ic_action_feed, 
                R.drawable.ic_action_tv,
                R.drawable.ic_action_ball,
        };

        List<HashMap<String, String>> listinfo = new ArrayList<HashMap<String, String>>();
        listinfo.clear();
        for(int i=0;i<names.length;i++){
            HashMap<String, String> hm = new HashMap<String, String>();
            hm.put("name", names[i]);
            hm.put("image", Integer.toString(image[i]));
            listinfo.add(hm);
        }

        // Keys used in Hashmap
        final String[] from = { "image", "name" };
        int[] to = { R.id.img, R.id.txt };

// The 2 followings lines works fine but i want to implement getView in order to set Typeface on my text
//      SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), listinfo, R.layout.drawer_list_item, from, to);
//      mDrawerList.setAdapter(adapter);


        SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), listinfo, R.layout.drawer_list_item, from, to){
            @Override
            public View getView(int pos, View convertView, ViewGroup parent){
                View v = convertView;
                if(v== null){
                    LayoutInflater vi = (LayoutInflater)getSystemService(getBaseContext().LAYOUT_INFLATER_SERVICE);
                    v=vi.inflate(R.layout.drawer_list_item, null);
                }
                TextView tv = (TextView)v.findViewById(R.id.txt);
                tv.setText(??????????);
                tv.setTypeface(faceBold);
                return v;
            }
        };
        mDrawerList.setAdapter(adapter);
4

1 回答 1

1

解决方案非常简单(这就是您没有得到任何答案的原因),而且 Raghunandan 是对的:您必须编写自己的Custom Adapter代码。

看看这个指南。您必须重写此方法:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ...
    // Your code for set different TypeFace go here
}

通过这样做,您可以为每个项目设置一个 TypeFace。

于 2013-10-16T09:58:11.820 回答