水平滚动的水平回收站视图 [英] horizontal recycler view with horizontal scroll

查看:54
本文介绍了水平滚动的水平回收站视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习android,而我似乎无法找到一种方法来做到这一点:

Im learning android and I cant seem to find a way to do this:

我想从右向左滚动,我想是recycer视图,但不确定是否是这个视图.我只需要有人指出我正确的方向. 我想我需要recyclerview的内部布局.

I would like to do the right to left scroll with what I guess would be a recylcer view, but not sure if its this. I just need someone to point me in the right direction. I guess i would need an interior layout for the recyclerview.

如果有人可以指出我在哪里解决这个问题,我将非常感激!

If someone could point me where to figure this out I would be so greatful!

推荐答案

步骤:1

创建两个如下所示的模型类.

Step: 1

Create two Model Classes like below.

package-name-here;


public class SingleItemModel {


    private String name;
    private String url;
    private String description;


    public SingleItemModel() {
    }

    public SingleItemModel(String name, String url) {
        this.name = name;
        this.url = url;
    }


    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }


}

  1. 创建另一个模型类SectionDataModel.java

  1. Create the other model class SectionDataModel.java

package-name-here;;

import java.util.ArrayList;


public class SectionDataModel {



private String headerTitle;
private ArrayList<SingleItemModel> allItemsInSection;


public SectionDataModel() {

}
public SectionDataModel(String headerTitle, ArrayList<SingleItemModel> allItemsInSection) {
    this.headerTitle = headerTitle;
    this.allItemsInSection = allItemsInSection;
}



public String getHeaderTitle() {
    return headerTitle;
}

public void setHeaderTitle(String headerTitle) {
    this.headerTitle = headerTitle;
}

public ArrayList<SingleItemModel> getAllItemsInSection() {
    return allItemsInSection;
}

public void setAllItemsInSection(ArrayList<SingleItemModel> allItemsInSection) {
    this.allItemsInSection = allItemsInSection;
}


}

3.步骤:2

使用RecyclerView创建活动以按垂直顺序显示列表.

3. Step: 2

Create an Activity with RecyclerView to show the list in vertical order.

package-name-here;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;

import com.pratap.gplaystore.adapters.RecyclerViewDataAdapter;
import com.pratap.gplaystore.models.SectionDataModel;
import com.pratap.gplaystore.models.SingleItemModel;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;


    ArrayList<SectionDataModel> allSampleData;


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

        toolbar = (Toolbar) findViewById(R.id.toolbar);

        allSampleData = new ArrayList<SectionDataModel>();

        if (toolbar != null) {
            setSupportActionBar(toolbar);
            toolbar.setTitle("G PlayStore");

        }


        createDummyData();


        RecyclerView my_recycler_view = (RecyclerView) findViewById(R.id.my_recycler_view);

        my_recycler_view.setHasFixedSize(true);

        RecyclerViewDataAdapter adapter = new RecyclerViewDataAdapter(this, allSampleData);

        my_recycler_view.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));

        my_recycler_view.setAdapter(adapter);


    }

    public void createDummyData() {
        for (int i = 1; i <= 5; i++) {

            SectionDataModel dm = new SectionDataModel();

            dm.setHeaderTitle("Section " + i);

            ArrayList<SingleItemModel> singleItem = new ArrayList<SingleItemModel>();
            for (int j = 0; j <= 5; j++) {
                singleItem.add(new SingleItemModel("Item " + j, "URL " + j));
            }

            dm.setAllItemsInSection(singleItem);

            allSampleData.add(dm);

        }
    }
}

  • 为上述活动类创建XML布局
  • activity_main.xml

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:elevation="8dp"
            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
    
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/my_recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="none" />
    
    
    </LinearLayout>
    

    步骤:3

    现在在MainActivity中为recyclerView创建一个适配器类.

    Step: 3

    Now Create an Adapter Class for the recyclerView in the MainActivity.

    RecyclerViewDataAdapter.java

    RecyclerViewDataAdapter.java

    package-name-here.adapters;
    
    
    import android.content.Context;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.pratap.gplaystore.R;
    import com.pratap.gplaystore.models.SectionDataModel;
    
    import java.util.ArrayList;
    
    public class RecyclerViewDataAdapter extends RecyclerView.Adapter<RecyclerViewDataAdapter.ItemRowHolder> {
    
        private ArrayList<SectionDataModel> dataList;
        private Context mContext;
    
        public RecyclerViewDataAdapter(Context context, ArrayList<SectionDataModel> dataList) {
            this.dataList = dataList;
            this.mContext = context;
        }
    
        @Override
        public ItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item, null);
            ItemRowHolder mh = new ItemRowHolder(v);
            return mh;
        }
    
        @Override
        public void onBindViewHolder(ItemRowHolder itemRowHolder, int i) {
    
            final String sectionName = dataList.get(i).getHeaderTitle();
    
            ArrayList singleSectionItems = dataList.get(i).getAllItemsInSection();
    
            itemRowHolder.itemTitle.setText(sectionName);
    
            SectionListDataAdapter itemListDataAdapter = new SectionListDataAdapter(mContext, singleSectionItems);
    
            itemRowHolder.recycler_view_list.setHasFixedSize(true);
            itemRowHolder.recycler_view_list.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false));
            itemRowHolder.recycler_view_list.setAdapter(itemListDataAdapter);
    
    
            itemRowHolder.btnMore.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
    
                    Toast.makeText(v.getContext(), "click event on more, "+sectionName , Toast.LENGTH_SHORT).show();
    
    
    
                }
            });
    
    
           /* Glide.with(mContext)
                    .load(feedItem.getImageURL())
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .centerCrop()
                    .error(R.drawable.bg)
                    .into(feedListRowHolder.thumbView);*/
        }
    
        @Override
        public int getItemCount() {
            return (null != dataList ? dataList.size() : 0);
        }
    
        public class ItemRowHolder extends RecyclerView.ViewHolder {
    
            protected TextView itemTitle;
    
            protected RecyclerView recycler_view_list;
    
            protected Button btnMore;
    
    
    
            public ItemRowHolder(View view) {
                super(view);
    
                this.itemTitle = (TextView) view.findViewById(R.id.itemTitle);
                this.recycler_view_list = (RecyclerView) view.findViewById(R.id.recycler_view_list);
                this.btnMore= (Button) view.findViewById(R.id.btnMore);
    
    
            }
    
        }
    
    }
    

    • 现在为上述适配器类创建一个xml布局文件.
    • list_item.xml

      list_item.xml

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
      
          android:background="?android:selectableItemBackground"
          android:orientation="vertical"
          android:padding="5dp">
      
          <RelativeLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:padding="2dp">
      
      
              <TextView
                  android:id="@+id/itemTitle"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_alignParentLeft="true"
                  android:layout_alignParentStart="true"
                  android:layout_centerVertical="true"
                  android:layout_gravity="center_vertical"
                  android:layout_toLeftOf="@+id/btnMore"
                  android:text="Sample title"
                  android:textColor="@android:color/black"
                  android:textSize="18sp" />
      
              <Button
                  android:id="@+id/btnMore"
                  android:layout_width="wrap_content"
                  android:layout_height="42dp"
                  android:layout_alignParentEnd="true"
                  android:layout_alignParentRight="true"
                  android:layout_centerVertical="true"
                  android:theme="@style/MyButton"
                  android:text="more"
                  android:textColor="#FFF" />
      
      
          </RelativeLayout>
      
          <android.support.v7.widget.RecyclerView
              android:id="@+id/recycler_view_list"
              android:layout_width="match_parent"
              android:layout_height="160dp"
              android:layout_gravity="center_vertical"
              android:orientation="horizontal" />
      
      
      </LinearLayout>
      

      步骤:4

      现在,为了制作水平RecyclerView,我们需要为每一行创建一个布局和Adapter类.

      Step: 4

      Now , In order to make a horizontal RecyclerView , we need create a layout and Adapter class for each row.

      list_single_card.xml

      list_single_card.xml

      <?xml version="1.0" encoding="utf-8"?>
      <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:orientation="horizontal"
          app:cardCornerRadius="5dp"
          app:cardUseCompatPadding="true"
          >
      
          <LinearLayout
              android:layout_width="match_parent"
              android:layout_height="wrap_content"
              android:padding="0dp"
              android:background="?android:selectableItemBackground"
              android:orientation="vertical">
      
              <ImageView
                  android:id="@+id/itemImage"
                  android:layout_width="100dp"
                  android:layout_height="100dp"
                  android:layout_gravity="center_horizontal"
                  android:scaleType="fitCenter"
                  android:src="@drawable/android" />
      
      
              <TextView
                  android:id="@+id/tvTitle"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:layout_below="@id/itemImage"
                  android:gravity="center"
                  android:padding="5dp"
                  android:text="Sample title"
                  android:textColor="@android:color/black"
                  android:textSize="18sp" />
      
      
          </LinearLayout>
      
      </android.support.v7.widget.CardView>
      

      • 最后,卧式RecyclerView的适配器类
      • SectionListDataAdapter.java

        SectionListDataAdapter.java

        package-name-here.adapters;
        
        
        import android.content.Context;
        import android.support.v7.widget.RecyclerView;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.ImageView;
        import android.widget.TextView;
        import android.widget.Toast;
        
        import com.pratap.gplaystore.R;
        import com.pratap.gplaystore.models.SingleItemModel;
        
        import java.util.ArrayList;
        
        public class SectionListDataAdapter extends RecyclerView.Adapter<SectionListDataAdapter.SingleItemRowHolder> {
        
            private ArrayList<SingleItemModel> itemsList;
            private Context mContext;
        
            public SectionListDataAdapter(Context context, ArrayList<SingleItemModel> itemsList) {
                this.itemsList = itemsList;
                this.mContext = context;
            }
        
            @Override
            public SingleItemRowHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
                View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_single_card, null);
                SingleItemRowHolder mh = new SingleItemRowHolder(v);
                return mh;
            }
        
            @Override
            public void onBindViewHolder(SingleItemRowHolder holder, int i) {
        
                SingleItemModel singleItem = itemsList.get(i);
        
                holder.tvTitle.setText(singleItem.getName());
        
        
               /* Glide.with(mContext)
                        .load(feedItem.getImageURL())
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .centerCrop()
                        .error(R.drawable.bg)
                        .into(feedListRowHolder.thumbView);*/
            }
        
            @Override
            public int getItemCount() {
                return (null != itemsList ? itemsList.size() : 0);
            }
        
            public class SingleItemRowHolder extends RecyclerView.ViewHolder {
        
                protected TextView tvTitle;
        
                protected ImageView itemImage;
        
        
                public SingleItemRowHolder(View view) {
                    super(view);
        
                    this.tvTitle = (TextView) view.findViewById(R.id.tvTitle);
                    this.itemImage = (ImageView) view.findViewById(R.id.itemImage);
        
        
                    view.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
        
        
                            Toast.makeText(v.getContext(), tvTitle.getText(), Toast.LENGTH_SHORT).show();
        
                        }
                    });
        
        
                }
        
            }
        
        }
        

        这篇关于水平滚动的水平回收站视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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