Search code examples
androidandroid-recyclerviewandroid-nestedscrollview

NestedScrollView not scrolling in recyclerView generated data


I'm using a NestedScrollView in a CardView that's generated in a RecyclerView. I can't get the scrolling to work - there seems to be sporadic moments when I can scroll through the list in the top item but no other scrolls seem to work. Cheers!

enter image description here

This is the layout of the cardView that's generated in the RecyclerView:

<?xml version="1.0" encoding="utf-8"?
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/checkout_relativeLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
    android:id="@+id/merchantPurchase"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="2dp"
    android:layout_marginLeft="12dp"
    android:layout_marginTop="4dp"
    android:text="TextView"
    android:textSize="18sp"
    app:layout_constraintBottom_toTopOf="@+id/checkoutCard"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintVertical_bias="0.0"
    android:layout_marginStart="12dp" />

<android.support.v7.widget.CardView
    android:id="@+id/checkoutCard"
    android:layout_width="340dp"
    android:layout_height="90dp"
    android:layout_margin="5dp"
    android:layout_marginBottom="11dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:elevation="5dp"
    app:cardCornerRadius="5dp"
    app:contentPadding="5dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_goneMarginLeft="5dp"
    app:layout_goneMarginRight="5dp">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal"
        android:paddingRight="5dp">

        <TextView
            android:id="@+id/textCentre"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp"
            android:text="Test2"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.7"
            app:layout_constraintLeft_toLeftOf="@+id/extraContainer"
            app:layout_constraintRight_toRightOf="@+id/extraContainer" />

        <TextView
            android:id="@+id/textRight"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="2dp"
            android:text="Test3"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.533"
            app:layout_constraintLeft_toLeftOf="@+id/otherContainer"
            app:layout_constraintRight_toRightOf="@+id/otherContainer" />

        <TextView
            android:id="@+id/textLeft"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="1dp"
            android:text="Test1"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.444"
            app:layout_constraintLeft_toLeftOf="@+id/priceContainer"
            app:layout_constraintRight_toRightOf="@+id/priceContainer" />

        <TextView
            android:id="@+id/extraContainer"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:adjustViewBounds="true"
            android:clickable="true"
            android:scaleType="centerCrop"
            android:textAlignment="center"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/priceContainer"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.17" />

        <TextView
            android:id="@+id/priceContainer"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="24dp"
            android:layout_marginStart="24dp"
            android:layout_marginTop="8dp"
            android:adjustViewBounds="true"
            android:clickable="true"
            android:scaleType="centerCrop"
            android:textAlignment="center"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/itemTitle"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.17" />

        <TextView
            android:id="@+id/otherContainer"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            android:adjustViewBounds="true"
            android:clickable="true"
            android:scaleType="centerCrop"
            android:textAlignment="center"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toRightOf="@+id/extraContainer"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.17" />

        <TextView
            android:id="@+id/itemTitle"
            android:layout_width="71dp"
            android:layout_height="39dp"
            android:layout_marginLeft="4dp"
            android:layout_marginStart="4dp"
            android:text="TextView"
            android:textAlignment="center"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.512" />

        <LinearLayout
            android:layout_width="63dp"
            android:layout_height="53dp"
            android:layout_marginLeft="0dp"
            android:orientation="vertical"
            app:layout_constraintLeft_toRightOf="@+id/otherContainer"
            tools:layout_editor_absoluteY="19dp"
            android:layout_marginRight="8dp"
            app:layout_constraintRight_toRightOf="parent"
            tools:layout_editor_absoluteX="258dp">

            <android.support.v4.widget.NestedScrollView
                android:id="@+id/nestedScrollView"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:fillViewport="true"
                android:layout_gravity="fill_vertical">

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

                    <TextView
                        android:id="@+id/textView45"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="TextView" />

                    <TextView
                        android:id="@+id/textView44"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="TextView" />

                    <TextView
                        android:id="@+id/textView43"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:text="TextView" />

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

    </android.support.constraint.ConstraintLayout>

</android.support.v7.widget.CardView>

Then, my abridged code for MainActivity:

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

    cardPurchasesDataSet = new ArrayList<>();
    for (int i = 0; i < productsForPurchase.length; i++) {
        cardPurchasesDataSet.add(productsForPurchase[i]);
    }
    card_totalPrice = new ArrayList<>();
    for (int i = 0; i < totalPriceData.length; i++) {
        card_totalPrice.add(totalPriceData[i]);
    }
    card_extras = new ArrayList<>();
    for (int i = 0; i < extrasData.length; i++) {
        card_extras.add(extrasData[i]);
    }
    card_more = new ArrayList<>();
    for (int i = 0; i < moreData.length; i++) {
        card_more.add(moreData[i]);
    }
    merchants = new ArrayList<>();
    for (int i = 0; i < merchantsData.length; i++) {
        merchants.add(merchantsData[i]);
    }

    card_recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    card_layoutManger = new LinearLayoutManager(this);
    card_recyclerView.setLayoutManager(card_layoutManger);
    card_adapter = new checkout_card_Adapter(cardPurchasesDataSet, card_totalPrice, card_extras, card_more, merchants);
    card_recyclerView.setAdapter(card_adapter);
}

UPDATE 01: Added mainActivity layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.v7.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="368dp"
    android:layout_height="551dp"
    app:layout_constraintTop_toTopOf="parent"
    android:layout_marginTop="8dp"
    android:layout_marginLeft="8dp"
    app:layout_constraintLeft_toLeftOf="parent"
    android:layout_marginRight="8dp"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    android:overScrollMode="never"
    android:layout_marginBottom="8dp" />

Adapter

public class Checkout_Card_Adapter extends 
RecyclerView.Adapter<Checkout_Card_Adapter.ViewHolder>{
private ArrayList<String> titleOfPurchase;
private ArrayList<String> priceOfPurchase;
private ArrayList<String> extrasOfPurchase;
private ArrayList<String> moreOfPurchase;
private ArrayList<String> merchantOfPurchase;

public Checkout_Card_Adapter(ArrayList<String> titleOfPurchase, ArrayList<String> priceOfPurchase, ArrayList<String> extrasOfPurchase, ArrayList<String> moreOfPurchase, ArrayList<String> merchantOfPurchase) {
    this.titleOfPurchase = titleOfPurchase;
    this.priceOfPurchase = priceOfPurchase;
    this.extrasOfPurchase = extrasOfPurchase;
    this.moreOfPurchase = moreOfPurchase;
    this.merchantOfPurchase = merchantOfPurchase;
}

public interface VenueAdapterInterface {
    void onVenueButtonClick(int position);
}

@Override
public Checkout_Card_Adapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.checkout_scrollable_card, viewGroup, false);
    Checkout_Card_Adapter.ViewHolder viewHolder = new Checkout_Card_Adapter.ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(Checkout_Card_Adapter.ViewHolder viewHolder, final int position) {
    viewHolder.itemTitle.setText(titleOfPurchase.get(position));
    viewHolder.itemPrice.setText(priceOfPurchase.get(position));
    viewHolder.itemExtras.setText(extrasOfPurchase.get(position));
    viewHolder.itemMore.setText(moreOfPurchase.get(position));
    viewHolder.merchant.setText(merchantOfPurchase.get(position));
}

@Override
public int getItemCount() {
    return titleOfPurchase.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    public ImageButton itemImage;
    public TextView itemTitle;
    public TextView itemPrice;
    public TextView itemExtras;
    public TextView itemMore;
    public TextView merchant;

    public ViewHolder(final View itemView) {
        super(itemView);
        itemTitle = (TextView) itemView.findViewById(R.id.itemTitle);
        itemPrice = (TextView) itemView.findViewById(R.id.priceContainer);
        itemExtras = (TextView) itemView.findViewById(R.id.extraContainer);
        itemMore = (TextView) itemView.findViewById(R.id.otherContainer);
        merchant = (TextView) itemView.findViewById(R.id.merchantPurchase);
    }
}

}


Solution

  • As per your screen shot how do you expect it to scroll the inner view while it showing all the views? it will only scroll on small devices where your all textview won't be able to display. Can you please post a proper screenshot of this view from app.