Tushar kalsara
Tushar kalsara

Reputation: 69

scrollview inside a fragment is not scrolling

i am new in app development.

i am using 3 tabs. in each fragment i want to display a list of cardview(7-8 cards).

my first fragment.xml

<ScrollView
android:layout_height="fill_parent"
android:layout_width="match_parent"
android:fillViewport="true"

xmlns:android="http://schemas.android.com/apk/res/android" >

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="10dp"
    android:background="@color/white">

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/crt1"
        card_view:cardUseCompatPadding="true"
        card_view:cardElevation="2dp"
        card_view:cardCornerRadius="1dp"
        android:clickable="true"
        android:foreground="?attr/selectableItemBackground">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp">

            <ImageView
                android:layout_width="85dp"
                android:layout_height="85dp"
                android:src="@drawable/c_3musketeers" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Three Musketeers"
                    android:textSize="25sp" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Rare | Air + Ground"
                    android:textSize="15sp" />
            </LinearLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Three Musketeers"
        android:textSize="25sp" />

    <android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:id="@+id/crt2"
        card_view:cardUseCompatPadding="true"
        card_view:cardElevation="2dp"
        card_view:cardCornerRadius="1dp"
        android:clickable="true"
        android:foreground="?attr/selectableItemBackground">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp">

            <ImageView
                android:layout_width="85dp"
                android:layout_height="85dp"
                android:src="@drawable/c_archers" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Archers"
                    android:textSize="25sp" />
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Common | Air + Ground"
                    android:textSize="15sp" />
            </LinearLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>

when i install this ap it is not scrolling at all.

my fragment.java file

public class TroopsFragment extends Fragment {

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

    final ScrollView scrollview1 = (ScrollView) inflater.inflate(R.layout.troops,
            container, false);


    CardView cvt1;
    cvt1 = (CardView) scrollview1.findViewById(R.id.crt1);


    cvt1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getActivity(), "tushar kalsara",
                    Toast.LENGTH_SHORT).show();
        }
    });
    return scrollview1;
}}

Upvotes: 5

Views: 12097

Answers (5)

RileyManda
RileyManda

Reputation: 2641

Using a nested scrollview for fragment views does the trick for achieving scrollable views:

<androidx.core.widget.NestedScrollView
    android:layout_width="wrap_content"
    android:layout_height="match_parent">

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

Upvotes: 2

user6048324
user6048324

Reputation:

Add this property in ScrollView

android:isScrollContainer="false"

and Make LinearLayout to

wrap_content

Upvotes: 5

Jayanth
Jayanth

Reputation: 6277

change scrollview's height to wrap content

and its children layouts to wrap content

then it will work

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

<LinearLayout
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/white"
    android:orientation="vertical"
    android:padding="10dp" >

    <android.support.v7.widget.CardView
        android:id="@+id/crt1"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:clickable="true"
        android:foreground="?attr/selectableItemBackground"
        card_view:cardCornerRadius="1dp"
        card_view:cardElevation="2dp"
        card_view:cardUseCompatPadding="true" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp" >

            <ImageView
                android:layout_width="85dp"
                android:layout_height="85dp"
                android:src="@drawable/c_3musketeers" />

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

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Three Musketeers"
                    android:textSize="25sp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Rare | Air + Ground"
                    android:textSize="15sp" />
            </LinearLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Three Musketeers"
        android:textSize="25sp" />

    <android.support.v7.widget.CardView
        android:id="@+id/crt2"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:clickable="true"
        android:foreground="?attr/selectableItemBackground"
        card_view:cardCornerRadius="1dp"
        card_view:cardElevation="2dp"
        card_view:cardUseCompatPadding="true" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="3dp" >

            <ImageView
                android:layout_width="85dp"
                android:layout_height="85dp"
                android:src="@drawable/c_archers" />

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

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Archers"
                    android:textSize="25sp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Common | Air + Ground"
                    android:textSize="15sp" />
            </LinearLayout>
        </LinearLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>

this might work. :)

Upvotes: 0

arsena
arsena

Reputation: 1975

You should never put a scrollable view inside another scrollable view. (in your example you have cardviews in scrollview).

However, if you insist on doing that anyway check this answer. You can set fixed heights on cardviews

It can be done also for listviews. See this blog if you need it

Upvotes: 0

Navneet Sharma
Navneet Sharma

Reputation: 89

Add this property in ScrollView

android:isScrollContainer="false"

and Make LinerLayout to

wrap_content

Upvotes: 0

Related Questions