如何在scrollview android中使用多个expandablelistview?

时间:2018-04-18 04:09:06

标签: android android-layout expandablelistview expandablelistadapter

我想在单个屏幕中设置3 expandablelistview 我想添加多个 expandablelistview

XmlLayout

//this is my scorllview
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    tools:context=".fragments.FragmentTestWellnessScoreBoard">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">


        <LinearLayout
            android:id="@+id/llHealth"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tvHealthTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:textStyle="bold"
                android:layout_margin="@dimen/margin_10"
                android:text="Health"/>

            <ExpandableListView
                android:id="@+id/elHealth"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </LinearLayout>


        <LinearLayout
            android:id="@+id/llChallenge"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tvChallengeTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:textStyle="bold"
                android:layout_margin="@dimen/margin_10"
                android:text="Challenge"/>

            <ExpandableListView
                android:id="@+id/elChallenge"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>


        <LinearLayout
            android:id="@+id/llRisk"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/tvRiskTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:textStyle="bold"
                android:layout_margin="@dimen/margin_10"
                android:text="Risk"/>

            <ExpandableListView
                android:id="@+id/elRisk"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>

    </LinearLayout>

我想在用户点击时设置逐个适配器我不知道如何设置多个expandableList? Java文件

private TestWellnessScoreBoardExpandableListAdapter mHealthaAdapter;
private TestWellnessScoreBoardExpandableListAdapter mChallengeAdapter;
private TestWellnessScoreBoardExpandableListAdapter mRiskAdapter;

private ExpandableListView elHealth;
private ExpandableListView elChallenge;
private ExpandableListView elRisk;

// this is my click listener to set adapter
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        switch (v.getId()) {
            case R.id.tvHealthTitle:

                mHealthaAdapter = new TestWellnessScoreBoardExpandableListAdapter(getActivity(), mWellnessResult.getWellnessArrayList());
                elHealth.setAdapter(mHealthaAdapter);

                break;
            case R.id.tvChallengeTitle:
                mChallengeAdapter = new TestWellnessScoreBoardExpandableListAdapter(getActivity(), mWellnessResult.getWellnessArrayList());
                elChallenge.setAdapter(mChallengeAdapter);
                break;
            case R.id.tvRiskTitle:
                mRiskAdapter = new TestWellnessScoreBoardExpandableListAdapter(getActivity(), mWellnessResult.getWellnessArrayList());
                elRisk.setAdapter(mRiskAdapter);
                break;
        }

    }
};

每件事情都很好但看不到全屏显示 i want to show view in full screen not in small part 但它没有全屏显示

2 个答案:

答案 0 :(得分:0)

试试这个:

xml代码:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_expandable_scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

<LinearLayout
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">


         <ExpandableListView
        android:id="@+id/activity_expandable_list_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"/>

           </LinearLayout>
           </ScrollView>

java class

mListView = (ExpandableListView) findViewById(R.id.activity_expandable_list_view);
    MyExpandableListAdapter adapter = new MyExpandableListAdapter(this,
            mGroups);
    mListView.setAdapter(adapter);
    mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {

        @Override
        public boolean onGroupClick(ExpandableListView parent, View v,
                                    int groupPosition, long id) {
            setListViewHeight(parent, groupPosition);
            return false;
        }
    });

需要此功能:

private void setListViewHeight(ExpandableListView listView,
                           int group) {
ExpandableListAdapter listAdapter = (ExpandableListAdapter) listView.getExpandableListAdapter();
int totalHeight = 0;
int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(),
        View.MeasureSpec.EXACTLY);
for (int i = 0; i < listAdapter.getGroupCount(); i++) {
    View groupItem = listAdapter.getGroupView(i, false, null, listView);
    groupItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);

    totalHeight += groupItem.getMeasuredHeight();

    if (((listView.isGroupExpanded(i)) && (i != group))
            || ((!listView.isGroupExpanded(i)) && (i == group))) {
        for (int j = 0; j < listAdapter.getChildrenCount(i); j++) {
            View listItem = listAdapter.getChildView(i, j, false, null,
                    listView);
            listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);

            totalHeight += listItem.getMeasuredHeight();

        }
    }
}

ViewGroup.LayoutParams params = listView.getLayoutParams();
int height = totalHeight
        + (listView.getDividerHeight() * (listAdapter.getGroupCount() - 1));
if (height < 10)
    height = 200;
params.height = height;
listView.setLayoutParams(params);
listView.requestLayout();

}

答案 1 :(得分:0)

尝试以下我在xml设计中所做的更改:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:weightSum="3">


        <LinearLayout
            android:id="@+id/llHealth"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tvHealthTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/margin_10"
                android:gravity="center"
                android:text="Health"
                android:textStyle="bold" />

            <ExpandableListView
                android:id="@+id/elHealth"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />

        </LinearLayout>


        <LinearLayout
            android:id="@+id/llChallenge"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tvChallengeTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/margin_10"
                android:gravity="center"
                android:text="Challenge"
                android:textStyle="bold" />

            <ExpandableListView
                android:id="@+id/elChallenge"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>


        <LinearLayout
            android:id="@+id/llRisk"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tvRiskTitle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/margin_10"
                android:gravity="center"
                android:text="Risk"
                android:textStyle="bold" />

            <ExpandableListView
                android:id="@+id/elRisk"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>

    </LinearLayout>
</ScrollView>