Intereting Posts
Какой из них лучше: Мудрый: setOnClickListener VS android: onclick = "onClick" Android BackupAgent не поддерживает резервное копирование / восстановление sharedpreferences Справка по PROXIMITY_SCREEN_OFF_WAKE_LOCK в Android Как проверить ListActivity, издеваясь над его contentProvider и тем самым изолировать тест от базы данных? Создать объект даты из Date Picker и Time Picker Значок запуска установки по умолчанию Android Contacts._ID! = Data.CONTACT_ID Org.apache.http.entity.ContentType больше не находится в Apache? Когда я загружаю ADT, почему я получаю сообщение об ошибке «Для Android SDK требуется Android Developer Toolkit версии XX.XX или выше?» Удалить разделитель ListView (в файле макета xml) Как получить использование памяти и использование процессора приложением? Android, сохранить файлы в автономном режиме (parse.com) AlertDialog или пользовательский диалог Как обновить отображаемое имя с идентификатором электронной почты? Манифест и поддерживаемые устройства, показанные на рынке Android

ActionBarDrawerToggle v7 или v4?

Я пытаюсь использовать ActionBarDrawerToggle в своем CustomDrawerLayout. Когда я пытаюсь импортировать import android.support.v4.app.ActionBarDrawerToggle; Он устарел. Когда я пытаюсь импортировать import android.support.v7.app.ActionBarDrawerToggle; Конструктор не принимает пять аргументов и значок не изменяется в ActionBar. Мой вопрос: я должен использовать v4 устаревший или v7 с четырьмя аргументами?

Вот.

v4

 /**v4 works with 5 arguments in constructor and change icon ActionBar but it's deprecated*/ import android.support.v4.app.ActionBarDrawerToggle; private ActionBarDrawerToggle tg; //ActionBarDrawerToggle deprecated tg = new ActionBarDrawerToggle(this, dl, R.drawable.ic_launcher, R.string.drawer_open, R.string.drawer_close){ public void onDrawerClosed(View view) { ab.setTitle(tl); supportInvalidateOptionsMenu(); } public void onDrawerOpened(View view) { ab.setTitle(tlf); supportInvalidateOptionsMenu(); } }; 

v7

 /**v7 works with 4 arguments in constructor and not change icon of ActionBar*/ import android.support.v7.app.ActionBarDrawerToggle; private ActionBarDrawerToggle tg; tg = new ActionBarDrawerToggle(this, dl, R.drawable.ic_launcher, R.string.drawer_open){ public void onDrawerClosed(View view) { ab.setTitle(tl); supportInvalidateOptionsMenu(); } public void onDrawerOpened(View view) { ab.setTitle(tlf); supportInvalidateOptionsMenu(); } }; 

CustomDrawerLayout

 public class CustomDrawerLayout extends ActionBarActivity implements OnItemClickListener{ private ActionBar ab; private DrawerLayout dl; private ListView lv; private ActionBarDrawerToggle tg; private List<ItensListView> fragments; private CharSequence tl; //titulo principal private CharSequence tlf; //titulo fragment @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_custom_drawerlayout); getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.action_bar))); init(); if(savedInstanceState == null){ selectedItem(0); } } private void init(){ //actionbar onConfigActionBar(); //listview configItensListView(); lv = (ListView)findViewById(R.id.lv); lv.setAdapter(new DrawerLayoutListViewAdapter(this, fragments)); lv.setOnItemClickListener(this); //drawerlayout dl = (DrawerLayout)findViewById(R.id.dl); //actionbardrawertoggle tg = new ActionBarDrawerToggle(this, dl, R.drawable.ic_launcher, R.string.drawer_open){ public void onDrawerClosed(View view) { ab.setTitle(tl); supportInvalidateOptionsMenu(); } public void onDrawerOpened(View view) { ab.setTitle(tlf); supportInvalidateOptionsMenu(); } }; dl.setDrawerListener(tg); tl = tlf = getTitle(); } /** ativa actionbar e botao home na action bar */ private void onConfigActionBar(){ ab = getSupportActionBar(); ab.setDisplayHomeAsUpEnabled(true); ab.setHomeButtonEnabled(true); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); tg.onConfigurationChanged(newConfig); } /** necessario */ @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); tg.syncState(); } /** necessario */ @Override public boolean onOptionsItemSelected(MenuItem item) { FragmentTransaction ft; Fragment frag; if(item.getItemId() == R.id.action_chat){ frag = new HelloBubblesActivity(); ft = getSupportFragmentManager().beginTransaction(); ft.replace(R.id.fl, frag, "HelloBubblesActivity"); ft.addToBackStack("back"); ft.commit(); } if (tg.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } /** necessario */ @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.custom_drawer_layout, menu); return true; } /** necessario */ @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean status = dl.isDrawerOpen(lv); menu.findItem(R.id.action_settings).setVisible(!status); return super.onPrepareOptionsMenu(menu); } 

В конструкторе v7 вы должны передать это как параметры:

 new ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes) 

Хотя конструктор v4

 new ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, int drawerImageRes, int openDrawerContentDescRes, int closeDrawerContentDescRes) 

Я думаю, что в вашем конструкторе v7 вы сохранили drawerImageRes в качестве третьего параметра (ic_launcher).

Попробуйте вместо этого:

 new ActionBarDrawerToggle(this, dl, R.string.drawer_open, R.string.drawer_close)