导航抽屉:在列表视图中添加标题

我用新的导航抽屉Object创建了一个项目。

我想自定义菜单的布局,添加另一个对象,如TextView,ImageView ……对于开始,我想修改默认布局,它只用一个列表视图组成,通过添加2或3个标题列表显示。

今天,我尝试使用“addHeaderView”,但我认为只能添加一个标题。

如何添加标题并真正自定义我的布局菜单? 因为,从开发人员API,似乎只有两个孩子在“android.support.v4.widget.DrawerLayout”下是允许的。

这是我今天的布局捕捉:

列表视图中的导航抽屉标题

这是我想要创建的捕获:

列表视图中的导航抽屉标题

这是我的MainActivity的一段代码:

public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mDrawerTitle; private CharSequence mTitle; private String[] mPlanetTitles; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); mPlanetTitles = getResources().getStringArray(R.array.planets_array); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); // Declaration of the 2 listview's mDrawerList = (ListView) findViewById(R.id.dernieres_news); LayoutInflater inflater = getLayoutInflater(); // Add header news title ViewGroup header_news = (ViewGroup)inflater.inflate(R.layout.header_dernieres_news, mDrawerList, false); mDrawerList.addHeaderView(header_news, null, false); // set a custom shadow that overlays the main content when the drawer opens mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); String[] names=new String[]{"Title 1", "Title 2", "Title 3", "Title 4", "Title 5"}; /*Array of Images*/ int[] image = new int[] {R.drawable.ic_action_feed, R.drawable.ic_action_feed, R.drawable.ic_action_feed, R.drawable.ic_action_feed, R.drawable.ic_action_feed}; List<HashMap> listinfo = new ArrayList<HashMap>(); listinfo.clear(); for(int i=0;i<5;i++){ HashMap hm = new HashMap(); hm.put("name", names[i]); hm.put("image", Integer.toString(image[i])); listinfo.add(hm); } // Keys used in Hashmap String[] from = { "image", "name" }; int[] to = { R.id.img, R.id.txt }; SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), listinfo, R.layout.drawer_list_item, from, to); mDrawerList.setAdapter(adapter); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); // enable ActionBar app icon to behave as action to toggle nav drawer getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); // ActionBarDrawerToggle ties together the the proper interactions // between the sliding drawer and the action bar app icon mDrawerToggle = new ActionBarDrawerToggle( this, /* host Activity */ mDrawerLayout, /* DrawerLayout object */ R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */ R.string.drawer_open, /* "open drawer" description for accessibility */ R.string.drawer_close /* "close drawer" description for accessibility */ ) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { selectItem(0); } } 

和activity_main.xml的代码:

    

  • 导航抽屉(menudrawer)Android 5(棒棒糖)风格
  • 如何在Action Bar的应用程序图标旁边添加“菜单”指示器?
  • 在NavigationDrawer中的SeekBar
  • 导航抽屉谷歌地图v2,地图阻止抽屉
  • 如何更改NavigationView中的分隔符颜色?
  • 工具的用途是什么:从向导创建DrawerLayout(使用NavigationView)时,openDrawer =“start”?
  • 自定义NavigationView - 添加动态headerView,Android支持设计库
  • 如何在导航抽屉布局中添加标题?
  • 您可以通过教您的ListAdapter返回标题行以及详细信息行,以与在任何其他ListView添加标题相同的方式执行此操作。 在低级别,这涉及覆盖getViewTypeCount()getItemViewType() ListAdapter ,并让getView()知道行types之间的差异。 或者,使用现有的高级实现,如https://github.com/emilsjolander/StickyListHeaders或http://code.google.com/p/android-amazing-listview/或搜索android listview headers时发现的任何其他实现android listview headers

    其他答案都是正确的。

    我find了一个非常好的例子,可以自定义视图以包含两种types的项目: menu sectionmenu item 。 当然,您可以将其更改为您想要的任何内容。

    该示例还包含抽象活动类的实现,每个具有导航抽屉的活动都inheritance自该类。

    http://www.michenux.net/android-navigation-drawer-748.html

    您必须子类化BaseAdapter并在ListView中使用它而不是SimpleAdapter。

    您为适配器提供填充数据,其中额外数据是标题。 标题和列表项本身将是同一个公共类的成员。 然后在适配器中,您根据数据项决定实际视图是标题还是项目,并相应地对其进行充气。

    更新:

    以下是一个很好的例子: http : //w2davids.wordpress.com/android-sectioned-headers-in-listviews/

    这实际上将标题与数据项分开并正确使用convertView,这与我之前在以前的应用程序中使用的解决方案不同。