2015-02-11 32 views
2

请帮助我我是新的android开发我已经创建了一个导航抽屉,现在我想在此添加子元素如何添加。如何在navigationdrawer中添加子元素与可扩展列表视图

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    mDrawerListView = (ListView) inflater.inflate(
      R.layout.fragment_navigation_drawer, container, false); 
    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      selectItem(position); 
     } 
    }); 
    mDrawerListView.setAdapter(new ArrayAdapter<String>(
      getActionBar().getThemedContext(), 
      android.R.layout.simple_list_item_activated_1, 
      android.R.id.text1, 
      new String[]{ 
        getString(R.string.title_section1), 
        getString(R.string.title_section2), 
        getString(R.string.title_section3), 
        getString(R.string.title_section4), 
        getString(R.string.title_section5), 
        getString(R.string.title_section6), 
        getString(R.string.title_section7) 
      })); 
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true); 
    return mDrawerListView; 
} 

我想补充这些元素的子元素

+0

你能来一点不清楚的请,你的意思是添加列表或别的东西了一些看法? – 2015-02-11 07:03:34

+0

你可以通过这个不错的教程http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/ – 2015-02-11 07:04:38

+0

雅我想添加更多的子项目内的主要项目谢谢先生给予这个链接信息现在我希望我会这样做,如果我会再次遇到任何问题,我会联系你,谢谢.. – 2015-02-12 07:59:16

回答

0

可以实现这一目标有两种方式第一个1是通过注释@Sharanbasu Angadi解释 - 即使用菜单资源了详细的教程解释 - http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/

如果您想自定义列表视图项目和标题,请使用ExpandableListView内部NavigationView,如下面的代码所述,第二个选项非常重要。

activity_main.xml中

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:openDrawer="start"> 

<include 
    layout="@layout/app_bar_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <include layout="@layout/nav_header_main" 
      android:id="@+id/nav_header_main" 
      /> 


     <ExpandableListView 
      android:id="@+id/nav_explistview" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/nav_header_main"/> 


    </RelativeLayout> 



</android.support.design.widget.NavigationView> 

MainActivity.java

package com.webege.rivu.navmenuexpandablelistview; 

import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.view.View; 
import android.support.design.widget.NavigationView; 
import android.support.v4.view.GravityCompat; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.ExpandableListView; 

import com.webege.rivu.navmenuexpandablelistview.adapters.ExpandableListAdapter; 

import java.util.ArrayList; 
import java.util.HashMap; 

public class MainActivity extends AppCompatActivity { 

    private ExpandableListView nav_explistview; 

    ArrayList<String> listDataHeader = new ArrayList<String>();; 
    HashMap<String, ArrayList<String>> listDataChild = new HashMap<String, ArrayList<String>>();; 
    private ExpandableListAdapter listAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
       this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
     drawer.setDrawerListener(toggle); 
     toggle.syncState(); 

     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 

     nav_explistview = (ExpandableListView) findViewById(R.id.nav_explistview); 

     // preparing list data 
     populateListData(); 

     listAdapter = new ExpandableListAdapter(listDataHeader, listDataChild,this); 

     // setting list adapter 
     nav_explistview.setAdapter(listAdapter); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    private void populateListData() { 


     // Adding child data 
     listDataHeader.add("Heading 1"); 
     listDataHeader.add("Heading 2"); 
     listDataHeader.add("Heading 3"); 

     // Adding child data 
     ArrayList<String> heading1 = new ArrayList<String>(); 
     heading1.add("Sub Item 1"); 
     heading1.add("Sub Item 2"); 
     heading1.add("Sub Item 3"); 
     heading1.add("Sub Item 4"); 

     ArrayList<String> heading2 = new ArrayList<String>(); 
     heading2.add("Sub Item 1"); 
     heading2.add("Sub Item 2"); 

     ArrayList<String> heading3 = new ArrayList<String>(); 
     heading3.add("Sub Item 1"); 
     heading3.add("Sub Item 2"); 
     heading3.add("Sub Item 3"); 
     heading3.add("Sub Item 4"); 
     heading3.add("Sub Item 5"); 
     heading3.add("Sub Item 6"); 
     heading3.add("Sub Item 7"); 


     listDataChild.put(listDataHeader.get(0), heading1); // Header, Child data 
     listDataChild.put(listDataHeader.get(1), heading2); 
     listDataChild.put(listDataHeader.get(2), heading3); 
    } 


} 

所以,简单地添加内部NavigationView一个ExpandableListView和,但是你想初始化ExpandableListView通常情况下,你可以得到预期的结果。

欲了解更多关于ExpandableListView的文章,请查看AndroidHive

+0

让我知道如果你遇到任何问题, 。 – 2016-12-09 11:54:29

+0

谢谢你为我工作。 – 2016-12-09 12:14:11

0

试试这个方法来添加子元素ExpandableListview

public class MainActivity extends AppCompatActivity { 

    private DrawerLayout mDrawerLayout; 
    private ActionBarDrawerToggle mDrawerToggle; 
    private String mActivityTitle; 
    private String[] items; 

    private ExpandableListView mExpandableListView; 
    private ExpandableListAdapter mExpandableListAdapter; 
    private List<String> mExpandableListTitle; 
    private NavigationManager mNavigationManager; 

    private Map<String, List<String>> mExpandableListData; 

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

     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); 
     mActivityTitle = getTitle().toString(); 

     mExpandableListView = (ExpandableListView) findViewById(R.id.navList); 
     mNavigationManager = FragmentNavigationManager.obtain(this); 

     initItems(); 

     LayoutInflater inflater = getLayoutInflater(); 
     View listHeaderView = inflater.inflate(R.layout.nav_header, null, false); 
     mExpandableListView.addHeaderView(listHeaderView); 

     mExpandableListData = ExpandableListDataSource.getData(this); 
     mExpandableListTitle = new ArrayList(mExpandableListData.keySet()); 

     addDrawerItems(); 
     setupDrawer(); 

     if (savedInstanceState == null) { 
      selectFirstItemAsDefault(); 
     } 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setHomeButtonEnabled(true); 
    } 

    private void selectFirstItemAsDefault() { 
     if (mNavigationManager != null) { 
      String firstActionMovie = getResources().getStringArray(R.array.actionFilms)[0]; 
      mNavigationManager.showFragmentAction(firstActionMovie); 
      getSupportActionBar().setTitle(firstActionMovie); 
     } 
    } 

    private void initItems() { 
     items = getResources().getStringArray(R.array.film_genre); 
    } 

    private void addDrawerItems() { 
     mExpandableListAdapter = new CustomExpandableListAdapter(this, mExpandableListTitle, mExpandableListData); 
     mExpandableListView.setAdapter(mExpandableListAdapter); 
     mExpandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() { 
      @Override 
      public void onGroupExpand(int groupPosition) { 
       getSupportActionBar().setTitle(mExpandableListTitle.get(groupPosition).toString()); 
      } 
     }); 

     mExpandableListView.setOnGroupCollapseListener(new ExpandableListView.OnGroupCollapseListener() { 
      @Override 
      public void onGroupCollapse(int groupPosition) { 
       getSupportActionBar().setTitle(R.string.film_genres); 
      } 
     }); 

     mExpandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, 
             int groupPosition, int childPosition, long id) { 
       String selectedItem = ((List) (mExpandableListData.get(mExpandableListTitle.get(groupPosition)))) 
        .get(childPosition).toString(); 
       getSupportActionBar().setTitle(selectedItem); 

       if (items[0].equals(mExpandableListTitle.get(groupPosition))) { 
        mNavigationManager.showFragmentAction(selectedItem); 
       } else if (items[1].equals(mExpandableListTitle.get(groupPosition))) { 
        mNavigationManager.showFragmentComedy(selectedItem); 
       } else if (items[2].equals(mExpandableListTitle.get(groupPosition))) { 
        mNavigationManager.showFragmentDrama(selectedItem); 
       } else if (items[3].equals(mExpandableListTitle.get(groupPosition))) { 
        mNavigationManager.showFragmentMusical(selectedItem); 
       } else if (items[4].equals(mExpandableListTitle.get(groupPosition))) { 
        mNavigationManager.showFragmentThriller(selectedItem); 
       } else { 
        throw new IllegalArgumentException("Not supported fragment type"); 
       } 

       mDrawerLayout.closeDrawer(GravityCompat.START); 
       return false; 
      } 
     }); 
    } 

    private void setupDrawer() { 
     mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close) { 

      /** Called when a drawer has settled in a completely open state. */ 
      public void onDrawerOpened(View drawerView) { 
       super.onDrawerOpened(drawerView); 
       getSupportActionBar().setTitle(R.string.film_genres); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 

      /** Called when a drawer has settled in a completely closed state. */ 
      public void onDrawerClosed(View view) { 
       super.onDrawerClosed(view); 
       getSupportActionBar().setTitle(mActivityTitle); 
       invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() 
      } 
     }; 

     mDrawerToggle.setDrawerIndicatorEnabled(true); 
     mDrawerLayout.setDrawerListener(mDrawerToggle); 
    } 

    @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); 
     mDrawerToggle.onConfigurationChanged(newConfig); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     // Activate the navigation drawer toggle 
     if (mDrawerToggle.onOptionsItemSelected(item)) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
相关问题