2013-11-27 25 views
1

我不知道爲什麼我的代碼將導致圖標在我的應用程序兩次露面。有人可以看看,告訴我哪一行正在做,也許如何解決它?當談到android時,我對這類東西還是一種新鮮感。不明白爲什麼抽屜式導航欄圖標顯示了兩次

enter image description here

http://imgur.com/npwY74r&zuxq11i#1

代碼:

info.androidhive.slidingmenu; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.res.Configuration; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.widget.DrawerLayout; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

private String[] drawerListViewItems; 
private DrawerLayout drawerLayout; 
private ListView drawerListView; 
private ActionBarDrawerToggle actionBarDrawerToggle; 

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

    // get list items from strings.xml 
    drawerListViewItems = getResources().getStringArray(R.array.items); 
    // get ListView defined in activity_main.xml 
    drawerListView = (ListView) findViewById(R.id.left_drawer); 

    // Set the adapter for the list view 
    drawerListView.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_listview_item, drawerListViewItems)); 

    // 2. App Icon 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    // 2.1 create ActionBarDrawerToggle 
    actionBarDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      drawerLayout,   /* DrawerLayout object */ 
      R.raw.ic_drawer, /* nav drawer icon to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description */ 
      R.string.drawer_close /* "close drawer" description */ 
      ); 

    // 2.2 Set actionBarDrawerToggle as the DrawerListener 
    drawerLayout.setDrawerListener(actionBarDrawerToggle); 

    // 2.3 enable and show "up" arrow 
    getActionBar().setDisplayHomeAsUpEnabled(true); 

    drawerListView.setOnItemClickListener(new DrawerItemClickListener()); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    actionBarDrawerToggle.syncState(); 
} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    // call ActionBarDrawerToggle.onOptionsItemSelected(), if it returns true 
    // then it has handled the app icon touch event 

    if (actionBarDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     Toast.makeText(MainActivity.this, ((TextView)view).getText(), Toast.LENGTH_LONG).show(); 
     drawerLayout.closeDrawer(drawerListView); 

    } 
} 
} 
+0

發生,如果不是'R.raw.ic_drawer'什麼你移動'ic_drawer'文件'drawable'文件夾並通過'R.drawable.ic_drawer'訪問它? –

+0

不,不變哈哈。我將ic_drawer複製到其中一個drawable中,並刪除了原始文件夾。沒有什麼改變 – booky99

+0

這就是我第一眼看到的奇怪。我會通過傳遞'R.drawable.ic_launcher'來嘗試它,因爲這通常是一個很好的圖像。此外,測試其他設備/模擬器,以確保它是一個普遍的問題。 –

回答

0
package info.androidhive.slidingmenu; 

import android.os.Bundle; 
import android.app.Activity; 
import android.content.res.Configuration; 
import android.support.v4.app.ActionBarDrawerToggle; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 

private String[] drawerListViewItems; 
private DrawerLayout drawerLayout; 
private ListView drawerListView; 
private ActionBarDrawerToggle actionBarDrawerToggle; 

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

    // get list items from strings.xml 
    drawerListViewItems = getResources().getStringArray(R.array.items); 
    // get ListView defined in activity_main.xml 
    drawerListView = (ListView) findViewById(R.id.left_drawer); 

    // Set the adapter for the list view 
    drawerListView.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_listview_item, drawerListViewItems)); 

    // 2. App Icon 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    // 2.1 create ActionBarDrawerToggle 
    actionBarDrawerToggle = new ActionBarDrawerToggle(
      this,     /* host Activity */ 
      drawerLayout,   /* DrawerLayout object */ 
      R.drawable.ic_drawer, /* nav drawer icon to replace 'Up' caret */ 
      R.string.drawer_open, /* "open drawer" description */ 
      R.string.drawer_close /* "close drawer" description */ 
      ); 

    // 2.2 Set actionBarDrawerToggle as the DrawerListener 
    drawerLayout.setDrawerListener(actionBarDrawerToggle); 

    // 2.3 enable and show "up" arrow 
    getActionBar().setDisplayHomeAsUpEnabled(true); 

    // just styling option 
    drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 
    //this is the line of code i needed. and also download the icon package for the shadow 

    drawerListView.setOnItemClickListener(new DrawerItemClickListener()); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    // Sync the toggle state after onRestoreInstanceState has occurred. 
    actionBarDrawerToggle.syncState(); 
} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 

    // call ActionBarDrawerToggle.onOptionsItemSelected(), if it returns true 
    // then it has handled the app icon touch event 

    if (actionBarDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView parent, View view, int position, long id) { 
     Toast.makeText(MainActivity.this, ((TextView)view).getText(), Toast.LENGTH_LONG).show(); 
     drawerLayout.closeDrawer(drawerListView); 

    } 
} 

}