Android中的滑动菜单

时间:2014-03-13 10:17:57

标签: android slidingmenu

我正在使用滑动菜单,但它仅适用于设备高于3.0的设备。 我想使用不同版本的android运行相同的代码。任何人都可以帮我找到解决方案吗?

这是我的代码

public class WelcomeActivity extends Activity {
private DrawerLayout mDrawerLayout;
private ListView mDrawerList;
private ActionBarDrawerToggle mDrawerToggle;
private CharSequence mDrawerTitle;
private CharSequence mTitle;
private String[] navMenuTitles;
private TypedArray navMenuIcons;
private ArrayList<NavDrawerItem> navDrawerItems;
private NavDrawerListAdapter adapter;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_welcome);
    mTitle = mDrawerTitle = getTitle();
    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
    navMenuIcons = getResources().obtainTypedArray(R.array.nav_drawer_icons);
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
    navDrawerItems = new ArrayList<NavDrawerItem>();
      navDrawerItems.add(new   NavDrawerItem(navMenuTitles[0],navMenuIcons.getResourceId(0, -1)));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
navMenuIcons.recycle();
    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
    adapter = new NavDrawerListAdapter(getApplicationContext(),navDrawerItems);
    mDrawerList.setAdapter(adapter);
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, 
            R.string.app_name, 
            R.string.app_name 
    )
{
public void onDrawerClosed(View view) {
getActionBar().setTitle(mTitle);
invalidateOptionsMenu();
 }
 public void onDrawerOpened(View drawerView) {
 getActionBar().setTitle(mDrawerTitle);
 invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
if (savedInstanceState == null) {
displayView(0);
    }
}

private class SlideMenuClickListener implements
    ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) 
{
displayView(position);}
}

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.layout.menu, menu);
    menu.getItem(0).getSubMenu();
    return true;
}




private void displayView(int position) {

    Fragment fragment = null;
    switch (position) {
    case 0:
        fragment = new HomeFragment();
        break;
    case 1:
        fragment = BackupFragment.getInstance();
        break;
    case 2:
        fragment = new RestoreFragment();
        break;
    default:
        break;
    }
    if (fragment != null) {
        FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.frame_container, fragment).commit();
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        //erreur de creation de fraglent
        Log.e("MainActivity", "Error in creating fragment");
    }
}
@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);
}

}

2 个答案:

答案 0 :(得分:0)

使用MenuDrawer库。效果很棒!

答案 1 :(得分:0)

您的应用程序崩溃,因为ActionBar未在Honeycomb(3.0)下面支持。

要避免此问题,您必须使用support library

要有更好的解释:

The ActionBar APIs were first added in Android 3.0 (API level 11) but they are also available in the Support Library for compatibility with Android 2.1 (API level 7) and above.

**Caution:** Be certain you import the ActionBar class (and related APIs) from the appropriate package:
  • 如果支持的API级别低于11:

    import android.support.v7.app.ActionBar

  • 如果仅支持API级别11及更高级别:

    import android.app.ActionBar

希望它有所帮助!!

相关问题