2014-11-01 255 views
0

我在Android中導航抽屜出現問題。所以這些代碼與我:Android導航抽屜級別

public class NavigationDrawer extends FragmentActivity { 
private String[] drawerListViewItems; 
private DrawerLayout drawerLayout; 
private ListView drawerListView; 
private ActionBarDrawerToggle actionBarDrawerToggle; 

protected DrawerLayout fullLayout; 
protected FrameLayout actContent; 

@Override 
public void setContentView(final int layoutResID) { 

    fullLayout = (DrawerLayout) getLayoutInflater().inflate(
      R.layout.navigation_drawer, null); // Your base layout here 
    actContent = (FrameLayout) fullLayout.findViewById(R.id.act_content); 
    getLayoutInflater().inflate(layoutResID, actContent, true); 
    super.setContentView(fullLayout); 
    drawerListViewItems = getResources().getStringArray(R.array.items); 
    drawerListView = (ListView) findViewById(R.id.left_drawer); 
    drawerListView.setAdapter(new ArrayAdapter<String>(this, 
      R.layout.drawer_listview_item, drawerListViewItems)); 
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    actionBarDrawerToggle = new ActionBarDrawerToggle(this, 
    drawerLayout, 
    R.drawable.ic_drawer, 
    R.string.drawer_open, 
    R.string.drawer_close 
    ); 
    drawerLayout.setDrawerListener(actionBarDrawerToggle); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, 
      GravityCompat.START); 
    drawerListView.bringToFront(); 
    drawerListView.setOnItemClickListener(new DrawerItemClickListener()); 
} 

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

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    if (actionBarDrawerToggle.onOptionsItemSelected(item)) { 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
    actionBarDrawerToggle.syncState(); 
} 

private class DrawerItemClickListener implements 
     ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView parent, View view, int position, 
      long id) { 
     switch (position) { 
     } 
     drawerLayout.closeDrawer(drawerListView); 
    } 
} 
} 

我的XML文件:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 
<ListView 
    android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="#111" 
    android:divider="#CCCCCC" 
    android:dividerHeight="0.5dp" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" /> 

<FrameLayout 
    android:id="@+id/act_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
</FrameLayout> 

</android.support.v4.widget.DrawerLayout> 

而且在那裏我宣佈了抽屜式導航欄項目的話字符串文件:

<string-array name="items"> 
    <item>Dashboard</item> 
    <item>Account</item> 
    <item>Setting</item> 
    <item>Recurring</item> 
    <item>Budget</item> 
</string-array> 

但隨着這些代碼中,導航抽屜級別只有一個。我想要做的是在儀表板,設置和預算下仍然會有子項目。

我不知道如何修改它,這樣的導航抽屜可以採取在項目中的一個多層次。

在此先感謝。

編輯

public class MainActivity extends Activity { 

private DrawerLayout mDrawerLayout; 
// private ListView mDrawerList; 

private ExpandableListView mDrawerList; 

private LinearLayout navDrawerView; 

CustomExpandAdapter customAdapter; 

private ActionBarDrawerToggle mDrawerToggle; 

private CharSequence mDrawerTitle; 
private CharSequence mTitle; 
private String[] mAnalyzeEventSelection; 
private int selectedPosition; 

List<SampleTO> listParent; 

HashMap<String, List<String>> listDataChild; 

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

    mTitle = mDrawerTitle = getTitle(); 

    navDrawerView = (LinearLayout) findViewById(R.id.navDrawerView); 
    mAnalyzeEventSelection = getResources().getStringArray(R.array.analyzeEvent_array); 
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 

    mDrawerList = (ExpandableListView) findViewById(R.id.nav_left_drawer); 

    // set a custom shadow that overlays the main content when the drawer 
    // opens 
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); 

    listParent = new ArrayList<SampleTO>(); 
    listDataChild = new HashMap<String, List<String>>(); 

    // Navigation Drawer of Flight starts 
    listParent.add(new SampleTO(getString(R.string.createEventDrawer), R.drawable.sun)); 
    listParent.add(new SampleTO(getString(R.string.analyzeEventDrawer), R.drawable.solar_system)); 
    listParent.add(new SampleTO(getString(R.string.qrCodeDrawer), R.drawable.moon)); 

    listDataChild.put(getString(R.string.createEventDrawer), new ArrayList<String>()); 
    listDataChild.put(getString(R.string.qrCodeDrawer), new ArrayList<String>()); 

    listDataChild.put(getString(R.string.analyzeEventDrawer), Arrays.asList(mAnalyzeEventSelection)); 

    customAdapter = new CustomExpandAdapter(this, listParent, listDataChild); 
    // setting list adapter 
    mDrawerList.setAdapter(customAdapter); 
    mDrawerList.setChoiceMode(ExpandableListView.CHOICE_MODE_SINGLE); 

    // enable ActionBar app icon to behave as action to toggle nav drawer 
    getActionBar().setDisplayHomeAsUpEnabled(true); 
    getActionBar().setHomeButtonEnabled(true); 

    // ActionBarDrawerToggle ties together the the proper interactions 
    // between the sliding drawer and the action bar app icon 
    mDrawerToggle = new ActionBarDrawerToggle(this, 
    mDrawerLayout, 
    R.drawable.ic_drawer, 
    R.string.drawer_open, 
    R.string.drawer_close 
    ) { 
     public void onDrawerClosed(View view) { 
      getActionBar().setTitle(mTitle); 
      invalidateOptionsMenu(); 
     } 

     public void onDrawerOpened(View drawerView) { 
      getActionBar().setTitle(mDrawerTitle); 
      invalidateOptionsMenu(); 
     } 
    }; 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    /* if (savedInstanceState == null) { 
     selectItem(0); 
    }*/ 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    mDrawerList.setOnGroupClickListener(new OnGroupClickListener() { 

     @Override 
     public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
      int index = parent.getFlatListPosition(ExpandableListView.getPackedPositionForGroup(groupPosition)); 
      parent.setItemChecked(index, true); 

      String parentTitle = ((SampleTO) customAdapter.getGroup(groupPosition)).getTitle(); 

      if (parentTitle.equals(getString(R.string.createEventDrawer))){ 
       Toast.makeText(
         MainActivity.this, 
         "Create Event", 
         Toast.LENGTH_LONG).show(); 
       setTitle(mAnalyzeEventSelection[selectedPosition]); 
      } 
      else if (parentTitle != getString(R.string.analyzeEventDrawer)) { 
       mDrawerLayout.closeDrawer(navDrawerView); 
      } 

      return false; 
     } 
    }); 

    mDrawerList.setOnChildClickListener(new OnChildClickListener() { 

     public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 

      int index = parent.getFlatListPosition(ExpandableListView.getPackedPositionForChild(groupPosition, childPosition)); 
      parent.setItemChecked(index, true); 

      selectItem(childPosition); 

      return false; 
     } 
    }); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main, menu); 
    return super.onCreateOptionsMenu(menu); 
} 

/* Called whenever we call invalidateOptionsMenu() */ 
@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    // If the nav drawer is open, hide action items related to the content 
    // view 
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(navDrawerView); 
    menu.findItem(R.id.action_websearch).setVisible(!drawerOpen); 
    return super.onPrepareOptionsMenu(menu); 
} 

private void selectItem(int position) { 
    selectedPosition = position; 
    mDrawerLayout.closeDrawer(navDrawerView); 

    switch(selectedPosition){ 
    case 0: 
     Toast.makeText(
       MainActivity.this, 
       "Event Pop", 
       Toast.LENGTH_LONG).show(); 
     break; 
    case 1: 
     Toast.makeText(
       MainActivity.this, 
       "Buffer", 
       Toast.LENGTH_LONG).show(); 
     break; 
    } 

    setTitle(mAnalyzeEventSelection[selectedPosition]); 

} 

@Override 
public void setTitle(CharSequence title) { 
    mTitle = title; 
    getActionBar().setTitle(mTitle); 
} 

/** 
* When using the ActionBarDrawerToggle, you must call it during onPostCreate() and onConfigurationChanged()... 
*/ 

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

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    // Pass any configuration change to the drawer toggls 
    mDrawerToggle.onConfigurationChanged(newConfig); 
} 
} 

而且我的字符串文件:

<resources> 
<string name="app_name">Navigation Drawer Example</string> 

<string name="createEventDrawer">Create Event</string> 
<string name="analyzeEventDrawer">Analyze Event</string> 
<string-array name="analyzeEvent_array"> 
    <item>Past Event Population</item> 
    <item>Buffer</item>  
</string-array> 
<string name="qrCodeDrawer">QR Code Scan</string> 

<string name="drawer_open">Open navigation drawer</string> 
<string name="drawer_close">Close navigation drawer</string> 
<string name="action_websearch">Web search</string> 
<string name="app_not_available">Sorry, there\'s no web browser available</string> 
<string name="_11">11</string> 

回答

1

步驟:

  1. 更改的ListView到Expandablelistview。
  2. 添加所需組項目的子項目。

例子:Custom Navigation Drawer

+0

你介意提供一些代碼示例可能落實到我的解決方案上面? – 2014-11-01 07:19:25

+0

@IWasSoLost,檢查我添加了例如鏈接 – 2014-11-01 07:21:45

+0

謝謝,但有沒有改變你的選擇信息()使用意圖,而不是片段的任何方式?我也選擇了太陽和月亮,但之後沒有發生任何事情。它應該以這種方式表現嗎? – 2014-11-01 07:33:31