布局编辑后,Android RecyclerView Scroll无法正常工作 [英] Android RecyclerView Scroll not working after Layout edit

查看:48
本文介绍了布局编辑后,Android RecyclerView Scroll无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在另一个RecyclerView中实现水平滚动的RecyclerView,这意味着父RecyclerView中的父RecyclerView(垂直滚动)和子RecyclerView(水平滚动).我提到了几个与此要求有关的问题,并从该问题中找到了更好的解决方案

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

这是我的验证码, 这是父片段.

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();
}
}

这是LayoutFile

this is 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" />

父级RecyclerView的适配器类

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适配器的布局

layout of parent RecyclerView adapter

<?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 RecyclerView 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提供的类相同. 其实我是android的新手,如果您遇到这种问题,请让我知道我所做的错误.谢谢大家.

ChildCustomLinearLayoutManager is the same class that provided by pptang in above mentioned question. Actually I am newbie in android,If you ever crossover this kind of problem let me know the mistake that I have done . Thank you all.

推荐答案

如果wrap_content且未设置明确的最小高度,RecyclerView会根据其子视图调整自身大小. 在您的孩子RecyclerView中,您必须考虑以下更改

RecyclerView sizes itself based on its child views if wrap_content and no explicit minimum height has been set. In your child RecyclerView you have to consider change as follows

<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,因此请设置

you are using horizontal recyclerView so set the

如果您想了解更多有关此问题的信息,请访问 https ://code.google.com/p/android/issues/detail?id = 74772 它会为您提供帮助.

this will works if you want to know more about this problem visit https://code.google.com/p/android/issues/detail?id=74772 it will help you.

这篇关于布局编辑后,Android RecyclerView Scroll无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆