2014-03-13 5 views
1

슬라이딩 메뉴를 사용하고 있지만 장치가 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); 
} 

}

+0

일부 기능은 특정 버전의 안드로이드에서만 사용할 수 있지만 어쩌면 당신이 예제를 제공하지 않기 때문일 것입니다. 제발, 몇 가지 코드를 공유하십시오. –

+0

여기에 코드를 붙여 넣으십시오 – Dev

+0

내 코드를 편집 할 수있게되었습니다. 그것은 3.0 device'version에서 잘 작동하지만, 나는 더 낮은 버전의 장치로 변경하면 갈망! – Marya

답변

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: 
  • 을하면 11보다 낮은 지원하는 API 레벨 :

    import android.support.v7.app.ActionBar

  • 전용 API 레벨 11 이상 지원하는 경우

    import android.app.ActionBar

희망!

+0

예, Android 3.0에 추가 된 문제입니다. 이제 import "android.support.v7.app.ActionBar"를 추가 할 때 android.support.v7을 가져올 수 없습니다. – Marya

+0

주먹구구, 지원 라이브러리를 설정해야합니다. 내 대답의 링크에서); 그리고 나서'getActionBar()'대신'getSupportActionBar()'를 호출해야만합니다. – yugidroid

+0

내 코드가 "getSupportActionBar()"를 지원하지 않습니다. 오류가 발생했습니다 !!! – Marya

0

사용 MenuDrawer 라이브러리입니다. 위대한 작품!

+0

이미 사용 중입니다 – Marya

+0

그럼 MenuDrawer는 API 7 이상에서 작동합니다. –