片段内的水平recyclerview不滚动

时间:2017-11-24 07:34:47

标签: android android-recyclerview android-cardview recycler-adapter horizontal-scrolling

我想在片段底部添加水平回收视图。我按照教程并成功实现了水平Recyclerview和cardview,但在尝试了所有可能的答案后,水平滚动无法正常工作。

这是我的代码: - XML: -

 <RelativeLayout tools:context="com.AlfaCab.Menuactivtiy"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:layout_marginTop="56dp"
    android:id="@+id/Mainlayout"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:background="@color/BgColor"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:background="@drawable/offer_white_box">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Offers"
        android:gravity="center"
        android:textSize="18sp"
        android:textColor="@color/BlackTextColor"
        android:textStyle="bold"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="5dp" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView_offer"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
        android:scrollbars="none"/>
      <!--  android:orientation="horizontal"
        android:scrollbars="horizontal"
        app:layoutManager="android.support.v7.widget.LinearLayoutManager"
       /> -->

    </LinearLayout>
</RelativeLayout>

这是我对recyclerview的offer_cardview.xml /自定义布局: -

  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical" android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <android.support.v7.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="5dp">

              <!--  &lt;!&ndash;Offer Start&ndash;&gt;
                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:background="@drawable/offer_white_box">
    -->

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

                        <!--Offer Coupon-->
                        <LinearLayout
                            android:layout_width="140dp"
                            android:layout_height="wrap_content"
                            android:orientation="vertical"
                            android:background="@drawable/round_box"
                            >
                            <LinearLayout
                                android:id="@+id/ll_offer_bg"
                                android:layout_width="match_parent"
                                android:layout_height="60dp"
                                android:orientation="horizontal"
                                android:background="@drawable/offer_red_box"
                                android:layout_marginBottom="3dp">
                                <TextView
                                    android:id="@+id/tv_offer_title"
                                    android:layout_width="match_parent"
                                    android:layout_height="wrap_content"
                                    android:text="Get 30% Cashback"
                                    android:textSize="12sp"
                                    android:textColor="@color/WhiteTextColor"
                                    android:textStyle="bold"
                                    android:layout_gravity="center_vertical"
                                    android:gravity="center"/>
                            </LinearLayout>
                            <TextView
                                android:id="@+id/tv_offer_disc"
                                android:layout_width="match_parent"
                                android:layout_height="80dp"
                                android:text="upto Rs. 300 cashback on Outstation"
                                android:textSize="10sp"
                                android:textColor="@color/BlackTextColor"
                                android:layout_marginBottom="5dp"
                                android:layout_marginLeft="5dp"
                                android:layout_marginRight="5dp"/>
                        </LinearLayout>
                        <!--Offer Coupon Ends-->
                    </LinearLayout>

                <!--</LinearLayout>-->
                <!--Offer Ends-->  
   </android.support.v7.widget.CardView>


    </LinearLayout>

HomeFragment.java: -

//a list to store all the products

List<Offer_Data> offerList;

//the recyclerview
RecyclerView recyclerView;

String appOfferId,appOfferTitle,appOfferDes,status;

在onCreate中: -

   //getting the recyclerview from xml
        recyclerView = (RecyclerView) rootView.findViewById(R.id.recyclerView_offer);

成功将数据添加到offerList后: -

 //creating recyclerview adapter
            Offer_Adapter adapter = new Offer_Adapter(getActivity(), offerList);
            //adapter.notifyDataSetChanged();
            recyclerView.setHasFixedSize(true);
            recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));
            recyclerView.setAdapter(adapter);
            adapter.notifyDataSetChanged();// Notify the adapter

Offer_Adapter.java: - (Recyclervire适配器)

public class Offer_Adapter extends RecyclerView.Adapter<Offer_Adapter.ProductViewHolder> {

    int[] myImageList;
    //this context we will use to inflate the layout
    private Context mCtx;

    //we are storing all the products in a list
    private List<Offer_Data> offerList;

    //getting the context and product list with constructor
    public Offer_Adapter(Context mCtx, List<Offer_Data> offerList) {
        this.mCtx = mCtx;
        this.offerList = offerList;
        this.myImageList = new int[]{R.drawable.offer_red_box, R.drawable.offer_megento_box, R.drawable.offer_yellow_box};
    }

    @Override
    public ProductViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //inflating and returning our view holder
        LayoutInflater inflater = LayoutInflater.from(mCtx);
        View view = inflater.inflate(R.layout.offer_cardview, null);
        return new ProductViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ProductViewHolder holder, int position) {
        //getting the product of the specified position
        Offer_Data product = offerList.get(position);

        //binding the data with the viewholder views
        holder.tv_offer_title.setText(product.getOffer_title());
        holder.tv_offer_disc.setText(product.getOffer_disc());

        int random_box = getRandom(myImageList);
        holder.ll_offer_bg.setBackgroundResource(random_box);
    }

    public static int getRandom(int[] array) {
        int rnd = new Random().nextInt(array.length);
        return array[rnd];
    }

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


    class ProductViewHolder extends RecyclerView.ViewHolder {

        TextView tv_offer_title, tv_offer_disc;
        LinearLayout ll_offer_bg;


        public ProductViewHolder(View itemView) {
            super(itemView);

            tv_offer_title = (TextView) itemView.findViewById(R.id.tv_offer_title);
            tv_offer_disc = (TextView) itemView.findViewById(R.id.tv_offer_disc);
            ll_offer_bg = (LinearLayout)itemView.findViewById(R.id.ll_offer_bg);
        }
    }
}

请帮我把它水平滚动。

2 个答案:

答案 0 :(得分:0)

LinearLayoutManager linearLayoutManager
    = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);

RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(linearLayoutManager);

答案 1 :(得分:0)

发现问题

更改此行

recyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false));

recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false));

问题是,您将错误的上下文传递给回收站视图管理器

使用getActivity()而不是getContext()

也不需要在xml

中添加此行
app:layoutManager="android.support.v7.widget.LinearLayoutManager"