android – ExpandableListView和NavigationDrawer

前端之家收集整理的这篇文章主要介绍了android – ExpandableListView和NavigationDrawer前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个很奇怪的问题.我的逻辑很简单,我的应用程序使用NavigationDrawer进行主应用程序导航,并且由于可用选项的复杂性,我想使用ExpandableListViev来嵌套一些导航项.

问题?简单:项目列表载入抽屉;然而,他们不扩大展示孩子们.

问题有什么理由不会扩大吗?我应该使用不同的UI小部件吗?

一些注释:我在一个不同的Activity上添加了相同的代码,而不是在抽屉上托管ExpandableListViev,而是把它添加到一个简单的LinearLayout上,作为唯一的元素,它在那里工作得很好.

我的活动布局:

<android.support.v4.widget.DrawerLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

<ExpandableListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/secondary_color_holo"/>

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

活动代码

private DrawerLayout mDrawerLayout;
private ExpandableListView mDrawerList;
private ExpandableDrawerAdapter mDrawerAdapter;

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

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ExpandableListView) findViewById(R.id.left_drawer);
    // set up the drawer's list view with items and click listener
    mDrawerAdapter = new ExpandableDrawerAdapter(this);
    mDrawerList.setAdapter(mDrawerAdapter);
    mDrawerList.setOnGroupClickListener(new DrawerGroupClickListener());
    mDrawerList.setOnChildClickListener(new DrawerChildClickListener());
}

最后一个非常简单的适配器:

public class ExpandableDrawerAdapter extends BaseExpandableListAdapter {

private static final int CAMPAIGNS = 0;
private static final int CONVERSIONS = 1;
private static final int MYACCOUNT = 2;

private LayoutInflater mInflater;
private String[] mainNavItems,campaignNavItems,myAccountNavItems;

public ExpandableDrawerAdapter (Activity context) {
    this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.mainNavItems = context.getResources().getStringArray(R.array.main_nav_items);
    this.campaignNavItems = context.getResources().getStringArray(R.array.campaigns_nav_items);
    this.myAccountNavItems = context.getResources().getStringArray(R.array.my_account_nav_items);
}

public Object getChild(int groupPosition,int childPosition) {

    switch (groupPosition) {
        case CAMPAIGNS:
            return campaignNavItems[childPosition];
        case MYACCOUNT:
            return myAccountNavItems[childPosition];
        default:
            return "";
    }
}

public long getChildId(int groupPosition,int childPosition) {
    return childPosition;
}

public View getChildView(final int groupPosition,final int childPosition,boolean isLastChild,View convertView,ViewGroup parent) {

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.drawer_child_list_item,null);
    }

    TextView childText = (TextView) convertView.findViewById(R.id.drawer_child_list_item_text);
    childText.setText((String) getChild(groupPosition,childPosition));

    return convertView;
}

public int getChildrenCount(int groupPosition) {
    switch (groupPosition) {
        case CAMPAIGNS:
            Constants.logMessage("Children for group position: " + groupPosition + " are: " + campaignNavItems.length);
            return campaignNavItems.length;
        case CONVERSIONS:
            Constants.logMessage("Children for group position: " + groupPosition + " are: " + 0);
            return 0;
        case MYACCOUNT:
            Constants.logMessage("Children for group position: " + groupPosition + " are: " + myAccountNavItems.length);
            return myAccountNavItems.length;
        default:
            return 0;
    }
}

public Object getGroup(int groupPosition) {
    return mainNavItems[groupPosition];
}

public int getGroupCount() {
    return mainNavItems.length;
}

public long getGroupId(int groupPosition) {
    return groupPosition;
}

public View getGroupView(int groupPosition,boolean isExpanded,ViewGroup parent) {

    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.drawer_list_item,null);
    }

    TextView groupText = (TextView) convertView.findViewById(R.id.drawer_list_item_text);
    groupText.setText((String) getGroup(groupPosition));
    return convertView;
}

public boolean hasStableIds() {
    return true;
}

public boolean isChildSelectable(int groupPosition,int childPosition) {
    return true;
}
}

解决方法

正如我在评论中所说的那样,请确保从您在ExpandableListView上设置的DrawerGroupClickListener返回false.如果从监听器的onGroupClick()回调中返回true,则会在事件为 considered handled时阻止collapse / expand操作.

猜你在找的Android相关文章