Как реализовать расширяемый ящик навигации Android с подпунктами?
Как реализовать ящик для навигации Android как это?
TopLevelView1 ~ TopLevelView4 может выбирать, а детей нет
TopVevelView5 может collaspe
Мой вопрос в том, что если моя групповая структура похожа на это, например
Все
Уставился
Категория
---- mp3 |
---- TXT
---- док
---- PDF
когда я выбираю все, а затем показываю весь файл.
когда я выбираю stared, тогда показывается только файл stared.
когда я выбираю mp3, тогда показываю только mp3 файлы.
и Категория может расширяться и сворачиваться.
![https://developer.android.com/design/media/navigation_drawer_collapse.png]()
Ответы
Ответ 1
Для навигации:
-
Альтернатива 1:
Скользящее меню, с которым я обязательно поеду. Даже используется популярным приложением, таким как LinkedIn и Foursquare, и легко реализуется и используется. Полное объяснение и примеры исходных кодов: SlidingMenu - GitHub
-
Альтернатива 2:
Android-навигатор. Если вы хотите полностью настроить все самостоятельно без использования каких-либо библиотек, это ваш вариант. Вы можете проверить коды и как это сделать на веб-сайте Android Developers: Создание ящика навигации
Просмотр в вашем навигационном ящике/скользящем меню:
-
Альтернатива 1:
Android по умолчанию ExpandableListView. Ссылки: Android-разработчики, androidhive
-
Альтернатива 2:
AnimatedExpandableListView, который реализуется из ExpandableListView, но когда элемент щелкнут, расширение выполняется с гладкой анимацией, которую вы, возможно, предпочтете использовать для лучшего просмотра. AnimatedExpandableListView
Ответ 2
Попробуйте что-нибудь подобное
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<FrameLayout
android:id="@+id/drawer_list_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start" >
<ExpandableListView
android:id="@+id/drawer_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"/>
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
Код Java:
drawerListView.setAdapter(new ExpandableListAdapter() {
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub
}
@Override
public void registerDataSetObserver(DataSetObserver observer) {
// TODO Auto-generated method stub
}
@Override
public void onGroupExpanded(int groupPosition) {
// TODO Auto-generated method stub
}
@Override
public void onGroupCollapsed(int groupPosition) {
// TODO Auto-generated method stub
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean hasStableIds() {
// TODO Auto-generated method stub
return true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView view = new TextView(getApplicationContext());
view.setText("group " + groupPosition);
return view;
}
@Override
public long getGroupId(int groupPosition) {
// TODO Auto-generated method stub
return groupPosition;
}
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return 5;
}
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getCombinedGroupId(long groupId) {
// TODO Auto-generated method stub
return 0;
}
@Override
public long getCombinedChildId(long groupId, long childId) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return 5;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
TextView view = new TextView(getApplicationContext());
view.setText("child " + groupPosition);
return view;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return childPosition ;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean areAllItemsEnabled() {
// TODO Auto-generated method stub
return false;
}
});