仿淘宝商品列表一列和两列排点击转换

我们可以利用Recyclerview可以单列和多列显示的特性,来实现仿淘宝商品列表单列和两列显示的效果。以下是我实现的单列和两列截图:

单列:

两列:

实现步骤:

1.准备adapter:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    Context context;
    LayoutInflater inflater;
    List<ProductBean> list;
    boolean isVertial=true;//true为1列的情况,false为2列的情况


    public MyAdapter(Context context, List<ProductBean> list) {
        this.context = context;
        this.list = list;
        this.inflater = LayoutInflater.from(context);
    }
    public MyAdapter(Context context, List<ProductBean> list,boolean isVertial) {
        this.context = context;
        this.list = list;
        this.isVertial=isVertial;
        this.inflater = LayoutInflater.from(context);
    }
    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

        View view =null;
        if(isVertial){
            view = inflater.inflate(R.layout.adapter_item_layout, null, false);

        }else{
            view = inflater.inflate(R.layout.adapter_item_hori_layout, null, false);

        }

        ViewHolder viewHolder = new ViewHolder(view);

        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        ProductBean bean=list.get(position);
        String name=bean.getPname();
        if((name!=null)&&(!name.equals(""))){
            holder.name.setText(name);
        }

    }

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

    class ViewHolder extends RecyclerView.ViewHolder {
        @BindView(R.id.name)
        TextView name;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this,itemView);
        }
    }


}

其中的layout,我分开写了两个,一个是1列的时候的layout,另外是2列的时候的layout:

(1)1列:R.layout.adapter_item_layout

<?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:orientation="horizontal"
    android:padding="10dp"
    >
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@mipmap/ic_launcher"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="222"
        android:textColor="@color/black"
        android:id="@+id/name"
        android:textSize="15sp"

        />
</LinearLayout>

(2)2列:R.layout.adapter_item_hori_layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp"
    android:gravity="center_horizontal"
    >
    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:src="@mipmap/ic_launcher"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:text="222"
        android:textColor="@color/black"
        android:id="@+id/name"
        android:textSize="15sp"

        />
</LinearLayout>

2.主activity的布局layout (R.layout.vercial_and_hori_activity_layout):

<?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="match_parent"
    android:orientation="vertical"
    >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="10dp"
        android:gravity="center"
        android:background="@color/white"
        >
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="综合"
            android:gravity="center"
            android:id="@+id/tt1"
            android:textColor="@color/black"
            />
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="销量"
            android:gravity="center"
            android:id="@+id/tt2"
            android:textColor="@color/black"
            />
        <ImageView
            android:layout_width="25dp"
            android:layout_height="25dp"
            android:src="@mipmap/vvicon"
            android:gravity="center"
            android:id="@+id/iv_choose"

            />
        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="筛选"
            android:gravity="center"
            android:id="@+id/tt4"
            android:textColor="@color/black"
            />
    </LinearLayout>
    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/review"

        />
</LinearLayout>

3.主activity代码:

public class VercialAndHoriActivity extends AppCompatActivity {


    @BindView(R.id.tt1)
    TextView tt1;
    @BindView(R.id.tt2)
    TextView tt2;
    @BindView(R.id.iv_choose)
    ImageView ivChoose;
    @BindView(R.id.tt4)
    TextView tt4;
    @BindView(R.id.review)
    RecyclerView review;

    MyAdapter adapter;
    List<ProductBean> list=new ArrayList<ProductBean>();
    boolean isVercial=true;//true为1列 false 为2列
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vercial_and_hori_activity_layout);
        ButterKnife.bind(this);
         for(int i=0;i<5;i++){
             ProductBean bean=new ProductBean();
             bean.setPname("儿童精美贴纸");
             list.add(bean);
         }
        for(int i=0;i<5;i++){
            ProductBean bean=new ProductBean();
            bean.setPname("儿童高级精美贴纸");
            list.add(bean);
        }

        setAdapterData();
        ivChoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                isVercial=!isVercial;//点击的时候改变该值
                if(isVercial){
                    ivChoose.setImageResource(R.mipmap.vvicon);//更改成1列图标
                }else{
                    ivChoose.setImageResource(R.mipmap.hhicon);//更改成2列图标

                }
                setAdapterData();
            }
        });

    }


   void setAdapterData(){
       adapter=new MyAdapter(VercialAndHoriActivity.this,list,isVercial);
       if(isVercial){
           LinearLayoutManager manager=new LinearLayoutManager(VercialAndHoriActivity.this);//1列
           review.setLayoutManager(manager);
       }else{
           GridLayoutManager manager1=new GridLayoutManager(VercialAndHoriActivity.this,2);//2列
           review.setLayoutManager(manager1);


       }
       review.setAdapter(adapter);

   }

}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
仿淘宝商城源码可以使用Spring Boot来开发。Spring Boot是一个非常流行的Java开发框架,它简化了Spring应用程序的配置和部署工作。借助Spring Boot,我们可以快速构建一个高效、可扩展的仿淘宝商城。 首先,我们可以使用Spring Boot的快速启动器来构建项目结构。快速启动器提供了一个初始的项目骨架,并且自动配置了一些常用的依赖项,例如Spring MVC、Tomcat等,以及一些常用的功能,例如数据访问、缓存、安全等。 其次,我们需要设计并实现数据库模型。仿淘宝商城有很多实体,例如商品、用户、订单等。我们可以使用Spring Boot的数据访问框架(例如Spring Data JPA)来定义和操作这些实体,并使用数据库(例如MySQL)来存储数据。 然后,我们可以开发前后端的交互接口。Spring Boot提供了强大的RESTful API支持,我们可以使用Spring MVC来设计并实现这些接口。前端可以通过HTTP请求来调用这些接口,并获取所需的数据。此外,我们还可以使用Spring Security来保护敏感的接口,确保只有经过身份验证的用户才能访问。 最后,我们可以使用一些流行的前端开发框架(例如Vue.js、React等)来实现用户界面。前端可以通过Ajax等技术与后端进行交互,并展示商品列表、购物车、下单等功能。 总结来说,使用Spring Boot来开发仿淘宝商城源码可以极大地提高开发效率和代码质量。Spring Boot提供了丰富的生态系统和自动化配置,可以让我们专注于业务逻辑的实现,而不需要过多关注基础设施的搭建。此外,Spring Boot还提供了很多集成以及可扩展的功能,例如缓存、分布式事务等,可以为仿淘宝商城带来更好的性能和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值