渲染GridView后如何调整片段大小?

时间:2019-07-16 13:00:09

标签: android-fragments android-gridview

我有一个活动,在Fragments中显示4个ScrollView。我难以正确调整片段大小。

所以,我在主文件中:

<android.support.constraint.ConstraintLayout
    android:id="@+id/cl_main"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.v4.widget.NestedScrollView
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toTopOf="@+id/adView"
        app:layout_constraintTop_toBottomOf="@id/tv_title">

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

            <fragment
                android:id="@+id/fragment_1"
                android:name="sharongilmore.knitoodle.fragments.Fragment1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <fragment
                android:id="@+id/fragment_2"
                android:name="sharongilmore.knitoodle.fragments.Fragment2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

            <fragment
                android:id="@+id/fragment_3"
                android:name="sharongilmore.knitoodle.fragments.Fragment3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"/>

            <fragment
                android:id="@+id/fragment_4"
                android:name="sharongilmore.knitoodle.fragments.Fragment4"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />

        </LinearLayout>

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

    <include
        android:id="@+id/adView"
        layout="@layout/layout_ad_view"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

</android.support.constraint.ConstraintLayout>

想法是将垂直列出这四个片段,并将tv_title和adView分别固定在屏幕的顶部和底部。这些片段位于NestedScrollView中,因此用户可以滚动浏览它们。

片段1包含一个GridView,这似乎引起了问题。如果我将GridView的高度固定为100dp,它将显示正常。但是,如果我将其设置为“ wrap_content”,则仅显示GridView的顶行。

片段1的布局是:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/fragment_1_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/str_title_1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <GridView
        android:id="@+id/gridview_itemList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnWidth="@dimen/grid_cell_column_width"
        android:gravity="center"
        android:horizontalSpacing="10dp"
        android:numColumns="auto_fit"
        android:padding="@dimen/dimen_s"
        android:paddingBottom="@dimen/dimen_std"
        android:stretchMode="columnWidth"
        android:verticalSpacing="10dp"
        app:layout_constraintTop_toBottomOf="@+id/fragment_1_title" />

</android.support.constraint.ConstraintLayout>

显示此内容时,GridView应该包含2行项目,但我只能看到第一行。

GridView的填充方式如下(在Fragment1.java中):

public class Fragment1 extends Fragment {

    private ArrayList<MyItem>   mItems;
    private GridView            mGrid;

    // NEW INSTANCE
    static public Fragment1 newInstance(ArrayList<MyItem> items) {

        Fragment1 f = new Fragment1();
        f.setRequiredData(items);

        return f;
    }

    private void setRequiredData(ArrayList<MyItem> items) {
        mItems = items;

    }

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater,
                             ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_1, container, false);

        mGrid = rootView.findViewById(R.id.gridview_itemList);

        initialiseWithItems();

        return rootView;
    }

    public void setItems(ArrayList<MyItem> items) {

        mItems = items;
        initialiseWithItems();

    }

    private void initialiseWithItems() {

        if (mItems == null) return;
        if(mGrid == null) return;

        // Now set up Adapter to display items in grid
        ItemAdapter mItemAdapter
                = new ItemAdapter(mItems);

        mGrid.setAdapter(mItemAdapter);

    }

}

因此,我想问题是它为GridView分配了要在填充之前显示的空间,然后一旦填充,分配的空间就不会改变。是吗?

关于如何修复它的任何建议?

0 个答案:

没有答案