2015-04-24 43 views
2

如何修改此代码并添加横向菜单类别?带类别的自定义导航抽屉

其实我有:

  • 页面1
  • 第2页
  • 第3页

我想获得的是:

  • 页面1
  • CATEGORY1
  • 页2
  • 页3
  • 页4
  • CATEGORY2
  • 页2
  • 页3

MainActivity代码:

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 
public class MainActivity extends Activity { 
private List<News> newsList = new ArrayList<News>(); 
private ListView listView; 
private CustomListNews adapter; 

private String[] mNavigationDrawerItemTitles; 
private DrawerLayout mDrawerLayout; 
private ListView mDrawerList; 

private ActionBarDrawerToggle mDrawerToggle; 
private CharSequence mDrawerTitle; 
private CharSequence mTitle; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 




MY APPLICATION CODE 






    mTitle = mDrawerTitle = getTitle(); 
    mNavigationDrawerItemTitles = getResources().getStringArray(R.array.navigation_drawer_items_array); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerList = (ListView) findViewById(R.id.left_drawer); 

    mDrawerList.setOnItemClickListener(new OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int pos, long arg3) { 
    Bundle extras = new Bundle(); 
    Intent intent = new Intent(MainActivity.this, ChannelList.class); 
    Intent intent1 = new Intent(MainActivity.this, Redazione.class); 
    Intent intent2 = new Intent(MainActivity.this, VideoGallery.class); 

    switch (pos) { 
    //Restart prima pagina 
    case 0: 
    restart(); 
    break; 

    //Start zone 
    case 1: 
    extras.putString("Channel","canale1"); 
    intent.putExtras(extras); 
    startActivity(intent); 
    break; 

    //Start argomenti 
    case 2: 
    extras.putString("Channel","canale2"); 
    intent.putExtras(extras); 
    startActivity(intent); 
    break; 

    //Start multimedia 
    case 3: 
    startActivity(intent2); 
    break; 

    //Start redazione 
    case 4: 
    startActivity(intent1); 
    break; 

    //Start redazione 
    case 5: 
    extras.putString("Channel","rubriche"); 
    intent.putExtras(extras); 
    startActivity(intent); 
    break; 

    default: 
    break; 
    } 
    } 
    }); 

    mDrawerList.bringToFront(); 
    mDrawerLayout.requestLayout(); 

    ObjectDrawerItem[] drawerItem = new ObjectDrawerItem[6]; 

    drawerItem[0] = new ObjectDrawerItem(R.drawable.ic_action_refresh, "Prima pagina"); 
    drawerItem[1] = new ObjectDrawerItem(R.drawable.ic_action_share, "Zone"); 
    drawerItem[2] = new ObjectDrawerItem(R.drawable.ic_action_copy, "Argomenti"); 
    drawerItem[3] = new ObjectDrawerItem(R.drawable.ic_action_copy, "Multimedia"); 
    drawerItem[4] = new ObjectDrawerItem(R.drawable.ic_action_share, "Reporter"); 
    drawerItem[5] = new ObjectDrawerItem(R.drawable.ic_action_copy, "Rubriche"); 

    DrawerItemCustomAdapter adapter = new DrawerItemCustomAdapter(this, R.layout.listview_item_row, drawerItem); 
    mDrawerList.setAdapter(adapter); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) { 

    public void onDrawerClosed(View view) { 
    invalidateOptionsMenu(); 
    } 

    public void onDrawerOpened(View drawerView) { 
    invalidateOptionsMenu(); 
    } 
    }; 

    mDrawerLayout.setDrawerListener(mDrawerToggle); 
} 

/******************************************************************************************************/ 

public void connectivityMessage(String msg){ 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); 
    alertDialog.setTitle("Nessuna connessione presente"); 
    alertDialog.setMessage(msg); 
    alertDialog.setPositiveButton("Riprova", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog,int which) { 
    restart(); 
    } 
    }); 

    alertDialog.setNegativeButton("Esci", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    onDestroy(); 
    } 
    }); 

    alertDialog.show(); 
} 

@Override 
public void onBackPressed() { 
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); 
    alertDialog.setTitle("Conferma uscita"); 
    alertDialog.setMessage("Sei sicuro di voler uscire ??"); 
    alertDialog.setPositiveButton("Si", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog,int which) { 
    finish(); 
    } 
    }); 

    alertDialog.setNegativeButton("No", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
    dialog.cancel(); 
    } 
    }); 
    alertDialog.show(); 
} 

public void change(){ 
    ChangeLog cl = new ChangeLog(this); 
    if (cl.firstRun()) 
    cl.getLogDialog().show(); 
} 

@Override 
public void onStart() { 
    super.onStart(); 
    Tracker tracker = GoogleAnalytics.getInstance(this).getTracker("UA-49974758-1"); 
    tracker.set(Fields.SCREEN_NAME, "Visualizzazione prima pagina"); 
    tracker.send(MapBuilder.createAppView().set(Fields.customDimension(1), "Premium").build()); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
} 

public void restart(){ 
    finish(); 
    startActivity(getIntent()); 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int itemid = item.getItemId(); 
    if (mDrawerToggle.onOptionsItemSelected(item)) { 
    return true; 
    }if (itemid == R.id.meteo){ 
    Intent intent = new Intent(this, Meteo.class); 
    startActivity(intent); 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    return super.onPrepareOptionsMenu(menu); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    getActionBar().setTitle(mTitle); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    mDrawerToggle.syncState(); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 
} 

我的抽屉适配器

package com.alessandrianews.utility; 


public class DrawerItemCustomAdapter extends ArrayAdapter<ObjectDrawerItem> { 

    Context mContext; 
    int layoutResourceId; 
    ObjectDrawerItem data[] = null; 

    /* 
    * @mContext - app context 
    * 
    * @layoutResourceId - the listview_item_row.xml 
    * 
    * @data - the ListItem data 
    */ 
    public DrawerItemCustomAdapter(Context mContext, int layoutResourceId, ObjectDrawerItem[] data) { 

     super(mContext, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.mContext = mContext; 
     this.data = data; 
    } 

    /* 
    * @We'll overried the getView method which is called for every ListItem we 
    * have. 
    * 
    * @There are lots of different caching techniques for Android ListView to 
    * achieve better performace especially if you are going to have a very long 
    * ListView. 
    */ 
    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View listItem = convertView; 

     // inflate the listview_item_row.xml parent 
     LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 
     listItem = inflater.inflate(layoutResourceId, parent, false); 

     // get the elements in the layout 

     ImageView imageViewIcon = (ImageView) listItem.findViewById(R.id.imageViewIcon); 
     TextView textViewName = (TextView) listItem.findViewById(R.id.textViewName); 


     /* 
     * Set the data for the list item. You can also set tags here if you 
     * want. 
     */ 
     ObjectDrawerItem folder = data[position]; 


     imageViewIcon.setImageResource(folder.icon); 
     textViewName.setText(folder.name); 

     return listItem; 
    } 

} 

包com.alessandrianews.utility;

对象抽屉项目

public int icon; 
    public String name; 

    // Constructor. 
    public ObjectDrawerItem(int icon, String name) { 

     this.icon = icon; 
     this.name = name; 
    } 
} 

这是我的布局: My layout

enter image description here

+0

你可以把一些布局或设计,你真正想要的? –

+0

@SurenderKumar我编辑了我的代码 –

+0

检查此链接 - http://www.tutecentral.com/android-custom-navigation-drawer/ –

回答

0

你可以一个标志添加到您的DrawerItemCustomAdapter像 “isHeader”。然后,您必须在您的适配器的data-Array中添加标题。

在您的适配器可以覆盖getItemViewType() - 方法如下图所示:

@Override 
public int getItemViewType(int position) { 
    return data[position].isHeader() ? 0 : 1; 
} 

所以,你有2种不同类型的可能的视图。

在你的getView中,你要求每个项目,它是哪种类型,然后你可以膨胀另一个布局,做不同的东西。

编辑: 并请启动谷歌和搜索Android查看持有人! 有了viewHolder,你可以回收你的意见。您的代码会一次又一次地膨胀每个项目的布局。有了这个视图,你只需要有很多视图就可以了!