Android RecyclerView Scroll not working after editing layout

I am trying to implement horizontal scrolling of a RecyclerView inside another RecyclerView, which means the parent RecyclerView (vertical scrolling) and the child RecyclerView (horizontal scrolling) inside the parent RecyclerView. I referred to a couple of questions regarding this requirement and found a better solution from this question. How to get ListView / RecyclerView inside the parent RecyclerView? and successfully implemented. After the child adapter’s layout file changes the scrolling of the child RecyclerView.

here are my codes, this is the parent fragment.

public class MarketFragment extends Fragment {

private String log = "abcpappaHomeFragment";
private Button loadMore ;
private ArrayList<ProductCategoryBean> productCategoryList=null;
private ProductCategoryService productCategoryService;
private RecyclerView.Adapter mAdapter;
private RecyclerView mRecyclerView;
private LinearLayoutManager mLayoutManager;

public MarketFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

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

    productCategoryService = new ProductCategoryService();
    productCategoryList =(ArrayList<ProductCategoryBean>)productCategoryService.getAllCategories();
    View rootView = inflater.inflate(R.layout.market_fragment, container, false);
    mRecyclerView = (RecyclerView)rootView.findViewById(R.id.market_recycle_list);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(getContext());
    mRecyclerView.setLayoutManager(mLayoutManager);
    mAdapter = new MarketRecyclerAdapter(getContext(),productCategoryList,this);
    mRecyclerView.setAdapter(mAdapter);
    return rootView;

}

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
}

@Override
public void onDetach() {
    super.onDetach();
}
}

this is a layoutfile

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
tools:context="bodhiinfo.abcpappa.activity.MarketFragment">>

<android.support.v7.widget.RecyclerView
    android:id="@+id/market_recycle_list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="4dp" />

adapter class for parent RecyclerView

public class MarketRecyclerAdapter extends RecyclerView.Adapter<MarketRecyclerAdapter.ViewHolder> {

private Context context;
private List<ProductCategoryBean> productCategoryList=null;
private List<ProductBean> productDetailList=null;
private RecyclerView.Adapter mAdapter;
public MarketFragment marketFragment;
// private marketList


public  MarketRecyclerAdapter(Context context,List<ProductCategoryBean> productCategoryList,MarketFragment marketFragment){
    this.context = context;
    this.productCategoryList =(ArrayList<ProductCategoryBean>)  productCategoryList;
    this.marketFragment = marketFragment;
    }

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.market_fragment_row, parent, false);
    ViewHolder viewHolder = new ViewHolder(v,context);
    return viewHolder;
    }

@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {

    ProductCategoryBean productCategoryBean =(ProductCategoryBean)productCategoryList.get(position);

    viewHolder.product_category_name_id.setText(productCategoryBean.getUtxt_product_category());
    ProductService productService = new ProductService();
    productDetailList = (ArrayList<ProductBean>)productService.getProductDetailsByCategoryId(productCategoryBean.getPki_product_category_id()+"");
    viewHolder.product_recycle_list.setHasFixedSize(false);
    viewHolder.mLayoutManager = new ChildCustomLinearLayoutManager(context,LinearLayoutManager.HORIZONTAL,false);
    viewHolder.product_recycle_list.setLayoutManager(viewHolder.mLayoutManager);
    mAdapter = new MarketRowRecyclerAdapter(context,productDetailList);
    viewHolder.product_recycle_list.setAdapter(mAdapter);

    }

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

public static class  ViewHolder extends RecyclerView.ViewHolder{

public TextView product_category_name_id;
public RecyclerView product_recycle_list;
public ChildCustomLinearLayoutManager mLayoutManager;
public Context context;

public View view;
public ClipData.Item currentItem;
public ViewHolder(final View itemView,final Context context) {
    super(itemView);
    this.context = context;
    product_category_name_id = (TextView)itemView.findViewById(R.id.product_category_name_id);
    product_recycle_list =(RecyclerView)itemView.findViewById(R.id.product_recycle_list);
    itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });
}
}
}

RecyclerView Parent Adapter Location

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:orientation="vertical"
tools:context="bodhiinfo.abcpappa.activity.MarketFragment">
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <!-- linear layout for market heading row-->
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/market_heading_raw"
        android:layout_marginTop="25dp">
        <TextView
            android:id="@+id/product_category_name_id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/market_heading"
            android:layout_weight="0.7"
            android:layout_gravity="left"
            android:gravity="left"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="View More.."
            android:layout_weight="0.3"
            android:layout_gravity="right"
            android:gravity="right"
            />
    </LinearLayout>
    <android.support.v7.widget.RecyclerView
        android:id="@+id/product_recycle_list"
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</LinearLayout>
</RelativeLayout>

RecyclerView child adapter

 public class MarketRowRecyclerAdapter extends RecyclerView.Adapter<MarketRowRecyclerAdapter.ViewHolder> {

private List<ProductBean> productList;
private Context context;

MarketRowRecyclerAdapter(Context context,List<ProductBean> productList){

   this.productList =(ArrayList<ProductBean>)productList;
   this.context = context;

}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View v =  LayoutInflater.from(parent.getContext()).inflate(R.layout.market_product_image_view, parent, false);
    ViewHolder viewHolder = new ViewHolder(v,context);
    return viewHolder;
 }

 @Override
 public void onBindViewHolder(ViewHolder viewHolder, int position) {

    ProductBean productBean=(ProductBean)productList.get(position);
    ImageCacheManager imageCacheManager= ImageCacheManager.INSTANCE;
    ImageLoader imageLoader=imageCacheManager.getImageLoader();
    viewHolder.market_product_image_id.setImageUrl("http://www.ps4home.com/wp-content/uploads/2013/10/Mad-Catz-F.R.E.Q.5-Headset-for-PC-and-Mac-Black.jpg", imageLoader);
    viewHolder.product_text_id.setText(productBean.getTxt_product_name());
    viewHolder.product_actual_price_id.setText("Rs :"+productBean.getTxt_product_actual_price());
    viewHolder.product_actual_price_id.setPaintFlags(viewHolder.product_actual_price_id.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
    viewHolder.product_app_price_id.setText("Rs :" + productBean.getTxt_product_price_in_app());

}

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

public static class  ViewHolder extends RecyclerView.ViewHolder{

    public TextView product_text_id;
    public TextView product_actual_price_id;
    public TextView product_app_price_id;
    public NetworkImageView market_product_image_id;
    public Context context;

    public View view;
    public ViewHolder(final View itemView,final Context context) {
        super(itemView);
        this.context = context;
        product_text_id = (TextView)itemView.findViewById(R.id.product_text_id);
        product_actual_price_id= (TextView)itemView.findViewById(R.id.product_actual_price_id);
        product_app_price_id= (TextView)itemView.findViewById(R.id.product_app_price_id);
        market_product_image_id = (NetworkImageView)itemView.findViewById(R.id.market_product_image_id);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

            }
        });
    }
  }
  }

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:paddingLeft="10dp"
tools:context="bodhiinfo.abcpappa.activity.MarketFragment">
    <FrameLayout
        android:id="@+id/market_product1_image_frame_id"
        android:layout_width="150dp"
        android:layout_height="150dp">
        <com.android.volley.toolbox.NetworkImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/market_product_image_id"/>
        <TextView
            android:id="@+id/product_text_id"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:textColor="@color/text_light"
            android:layout_gravity="bottom"
            android:text="@string/product_one"
            android:background="@drawable/textbackgrounds"/>
    </FrameLayout>
    <TextView
        android:id="@+id/product_actual_price_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textColor="@color/text_dark_black"
        android:text="@string/product_one"
        android:layout_below="@+id/market_product1_image_frame_id"/>
    <TextView
        android:id="@+id/product_app_price_id"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/product_one"
        android:textColor="@color/text_dark_black"
        android:layout_below="@+id/product_actual_price_id"/>
 </LinearLayout>

ChildCustomLinearLayoutManager - , pptang . . - , , . .

+4
1

RecyclerView , wrap_content . RecyclerView

<android.support.v7.widget.RecyclerView
    android:id="@+id/product_recycle_list"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

recyclerView,

, , https://code.google.com/p/android/issues/detail?id=74772 .

+2

Source: https://habr.com/ru/post/1622313/


All Articles