2014-12-17 5 views
11

Próbuję użyć ActionBarDrawerToggle w moim CustomDrawerLayout. Kiedy próbuję importować import android.support.v4.app.ActionBarDrawerToggle;, jest przestarzałe. Kiedy próbuję importować import android.support.v7.app.ActionBarDrawerToggle;, konstruktor nie przyjmuje pięciu argumentów, a ikona nie została zmieniona w ActionBar. Moje pytanie brzmi: powinienem użyć v4 przestarzałego lub v7 z czterema argumentami?ActionBarDrawerToggle v7 lub v4?

tutaj.

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); 
    } 
+2

z obecnym 'ActionBarActivity', myślę, że jedynym wyborem jest wersja v7'' 'z ActionBarDrawerToggle'. – CommonsWare

Odpowiedz

18

W konstruktorze v7, należy przekazać to jako parametrami:

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

Podczas gdy konstruktor v4 jest

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

myślę w v7 ty konstruktora Państwo pozostawiła drawerImageRes jako trzeci parametr (ic_launcher).

Spróbuj z tym zamiast:

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