动画跳转+recyclerview

该博客介绍了一个简单的商品列表展示应用的实现过程,包括依赖配置、权限设置、页面布局及代码逻辑等核心内容。应用使用了Gson进行数据解析,OkHttp进行网络请求,并通过RecyclerView展示商品列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

依赖

compile 'com.google.code.gson:gson:2.6.2'

    compile 'com.squareup.okhttp3:okhttp:3.3.0'

    compile 'com.github.bumptech.glide:glide:3.7.0'

    compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'

权限

 <uses-permission android:name="android.permission.INTERNET"/>

记得更改首页展示

<activity android:name=".view.SplashActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>


布局 activity_main

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.daydayup.day15_lianxi.view.MainActivity">

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

        <TextView
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_horizontal"
            android:text="商品列表"
            android:textSize="25sp" />

        <ImageView
            android:id="@+id/change"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:src="@drawable/kind_grid" />
    </LinearLayout>


    <View
        android:layout_width="match_parent"
        android:layout_height="0.75dp" />


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

        <com.daydayup.day15_lianxi.view.MySearchView
            android:id="@+id/mysearch"
            android:layout_width="0dp"
            android:layout_height="55dp"
            android:layout_weight="1"></com.daydayup.day15_lianxi.view.MySearchView>

        <TextView
            android:id="@+id/sousuo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="搜索"
            android:textSize="20sp" />

    </LinearLayout>


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

</LinearLayout>

这是Activity

activity_splash

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/splash_pic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:src="@mipmap/ic_launcher" />

</LinearLayout>


item_layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <ImageView
        android:id="@+id/item_pic"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:src="@mipmap/ic_launcher" />

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

        <TextView
            android:id="@+id/itme_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="标题" />

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

            <TextView
                android:id="@+id/item_price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="价格" />

            <TextView
                android:id="@+id/item_price2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="折扣价格" />
        </LinearLayout>


    </LinearLayout>

</LinearLayout>


layout_search

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/search_bg"
    android:orientation="horizontal"
    android:padding="8dp">

    <ImageView
        android:layout_width="@dimen/search_height"
        android:layout_height="@dimen/search_height"
        android:src="@drawable/a_4" />

    <EditText
        android:id="@+id/search_content"
        android:layout_width="0dp"
        android:layout_height="@dimen/search_height"
        android:layout_weight="1"
        android:background="@null" />

    <ImageView
        android:layout_width="@dimen/search_height"
        android:layout_height="@dimen/search_height"
        android:src="@drawable/root" />

</LinearLayout>

代码

adapters文件夹

MyAdapter


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 com.bumptech.glide.Glide;
import com.daydayup.day15_lianxi.R;
import com.daydayup.day15_lianxi.model.GoodsListBean;

import java.util.List;

/**
 * Created by gjl on 2018/4/26.
 */

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private Context context;
    private List<GoodsListBean.DataBean> list;

    public MyAdapter(Context context, List<GoodsListBean.DataBean> list) {

        this.list = list;
        this.context = context;

    }


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

        View view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);
        MyViewHolder myViewHolder = new MyViewHolder(view);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        String pic_url = list.get(position).getImages().split("\\|")[0];
        Glide.with(context).load(pic_url).into(holder.getImageView());


        holder.getTitle().setText(list.get(position).getTitle());
        holder.getPrice().setText(list.get(position).getPrice() + "");
        holder.getPrice2().setText(list.get(position).getBargainPrice() + "");

    }

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

    class MyViewHolder extends RecyclerView.ViewHolder {

        private final ImageView imageView;
        private final TextView title;
        private final TextView price;
        private final TextView price2;

        public MyViewHolder(View itemView) {
            super(itemView);
            //找控件
            imageView = itemView.findViewById(R.id.item_pic);
            title = itemView.findViewById(R.id.itme_title);
            price = itemView.findViewById(R.id.item_price);
            price2 = itemView.findViewById(R.id.item_price2);
        }

        public MyViewHolder(View itemView, ImageView imageView, TextView title, TextView price, TextView price2) {
            super(itemView);
            this.imageView = imageView;
            this.title = title;
            this.price = price;
            this.price2 = price2;
        }

        public ImageView getImageView() {
            return imageView;
        }

        public TextView getTitle() {
            return title;
        }

        public TextView getPrice() {
            return price;
        }

        public TextView getPrice2() {
            return price2;
        }
    }


}

http文件夹就不放了

model文件夹

GetGoodsListener

public interface GetGoodsListener {
    void getSuccess(String json);

    void getError(String error);
}

GoodsListBean


public class GoodsListBean {

    /**
     * msg : 查询成功
     * code : 0
     * data : [{"bargainPrice":11800,"createtime":"2017-10-14T21:48:08","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":2,"pid":77,"price":38999.99,"pscid":40,"salenum":7757,"sellerid":21,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":66,"price":13000,"pscid":40,"salenum":7676,"sellerid":10,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":76,"price":37999.99,"pscid":40,"salenum":6868,"sellerid":20,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":69,"price":16999,"pscid":40,"salenum":6645,"sellerid":13,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":61,"price":14999,"pscid":40,"salenum":5535,"sellerid":5,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":75,"price":36999,"pscid":40,"salenum":5454,"sellerid":19,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":79,"price":888,"pscid":40,"salenum":5454,"sellerid":23,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-10T17:33:37","detailUrl":"https://item.m.jd.com/product/4338107.html?utm#_source=androidapp&utm#_medium=appshare&utm#_campaign=t#_335139774&utm#_term=QQfriends","images":"https://m.360buyimg.com/n0/jfs/t6700/155/2098998076/156185/6cf95035/595dd5a5Nc3a7dab5.jpg!q70.jpg","itemtype":0,"pid":57,"price":5199,"pscid":40,"salenum":4343,"sellerid":1,"subhead":"【i5 MX150 2G显存】全高清窄边框 8G内存 256固态硬盘 支持指纹识别 预装WIN10系统","title":"小米(MI)Air 13.3英寸全金属轻薄笔记本(i5-7200U 8G 256G PCle SSD MX150 2G独显 FHD 指纹识别 Win10)银 "},{"bargainPrice":11800,"createtime":"2017-10-03T23:53:28","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":0,"pid":71,"price":32999,"pscid":40,"salenum":4242,"sellerid":15,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"},{"bargainPrice":11800,"createtime":"2017-10-14T21:38:26","detailUrl":"https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1","images":"https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg","itemtype":1,"pid":63,"price":10000,"pscid":40,"salenum":3232,"sellerid":7,"subhead":"购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)","title":"全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G"}]
     * page : 1
     */

    private String msg;
    private String code;
    private String page;
    private List<DataBean> data;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getPage() {
        return page;
    }

    public void setPage(String page) {
        this.page = page;
    }

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        /**
         * bargainPrice : 11800
         * createtime : 2017-10-14T21:48:08
         * detailUrl : https://mitem.jd.hk/ware/view.action?wareId=1988853309&cachekey=1acb07a701ece8d2434a6ae7fa6870a1
         * images : https://m.360buyimg.com/n0/jfs/t6130/97/1370670410/180682/1109582a/593276b1Nd81fe723.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5698/110/2617517836/202970/c9388feb/593276b7Nbd94ef1f.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5815/178/2614671118/51656/7f52d137/593276c7N107b725a.jpg!q70.jpg|https://m.360buyimg.com/n0/jfs/t5878/60/2557817477/30873/4502b606/593276caN5a7d6357.jpg!q70.jpg
         * itemtype : 2
         * pid : 77
         * price : 38999.99
         * pscid : 40
         * salenum : 7757
         * sellerid : 21
         * subhead : 购买电脑办公部分商品满1元返火车票5元优惠券(返完即止)
         * title : 全球购 新款Apple MacBook Pro 苹果笔记本电脑 银色VP2新13英寸Bar i5/8G/256G
         */

        private double bargainPrice;
        private String createtime;
        private String detailUrl;
        private String images;
        private int itemtype;
        private int pid;
        private double price;
        private int pscid;
        private int salenum;
        private int sellerid;
        private String subhead;
        private String title;

        public double getBargainPrice() {
            return bargainPrice;
        }

        public void setBargainPrice(double bargainPrice) {
            this.bargainPrice = bargainPrice;
        }

        public String getCreatetime() {
            return createtime;
        }

        public void setCreatetime(String createtime) {
            this.createtime = createtime;
        }

        public String getDetailUrl() {
            return detailUrl;
        }

        public void setDetailUrl(String detailUrl) {
            this.detailUrl = detailUrl;
        }

        public String getImages() {
            return images;
        }

        public void setImages(String images) {
            this.images = images;
        }

        public int getItemtype() {
            return itemtype;
        }

        public void setItemtype(int itemtype) {
            this.itemtype = itemtype;
        }

        public int getPid() {
            return pid;
        }

        public void setPid(int pid) {
            this.pid = pid;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public int getPscid() {
            return pscid;
        }

        public void setPscid(int pscid) {
            this.pscid = pscid;
        }

        public int getSalenum() {
            return salenum;
        }

        public void setSalenum(int salenum) {
            this.salenum = salenum;
        }

        public int getSellerid() {
            return sellerid;
        }

        public void setSellerid(int sellerid) {
            this.sellerid = sellerid;
        }

        public String getSubhead() {
            return subhead;
        }

        public void setSubhead(String subhead) {
            this.subhead = subhead;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }
    }
}

IModel

public interface IModel {
    //获取商品列表数据
    void getGoodsListData(String url, Map<String,String> map,GetGoodsListener getGoodsListener);
}

ModelImpl

public class ModelImpl implements IModel {
    @Override
    public void getGoodsListData(String url, Map<String, String> map, final GetGoodsListener getGoodsListener) {
        HttpUtils httpUtils = HttpUtils.getHttpUtils();
        httpUtils.okPost(url, map);
        httpUtils.setOkLoadListener(new OkLoadListener() {
            @Override
            public void okLoadSuccess(String json) {
                getGoodsListener.getSuccess(json);
            }

            @Override
            public void okLoadError(String error) {
                getGoodsListener.getError(error);
            }
        });
    }
}

presenter文件夹

IPresenter

public interface IPresenter {
    void showGoodsListToView(IModel iModel, IMainView iMainView);
}

PresenterImpl

public class PresenterImpl implements IPresenter {
    private static final String TAG = "PresenterImpl---";
    @Override
    public void showGoodsListToView(IModel iModel, final IMainView iMainView) {
        Map<String,String> map = new HashMap<>();
        map.put("keywords",iMainView.getContent());
        map.put("page","1");
        iModel.getGoodsListData(HttpConfig.goodslist_url, map, new GetGoodsListener() {
            @Override
            public void getSuccess(String json) {
                Log.d(TAG, "数据----: "+json);
                Gson gson = new Gson();
                GoodsListBean goodsListBean = gson.fromJson(json, GoodsListBean.class);
                List<GoodsListBean.DataBean> list = goodsListBean.getData();
                //放入view
                iMainView.showGoodsList(list);
            }

            @Override
            public void getError(String error) {
                Log.d(TAG, "getError: "+error);
            }
        });
    }
}

view文件夹

IMainView

public interface IMainView {
    //显示商品也
    void showGoodsList(List<GoodsListBean.DataBean> list);

    //获取输入框内容
    String getContent();

}

MainActivity


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.daydayup.day15_lianxi.R;
import com.daydayup.day15_lianxi.adapters.MyAdapter;
import com.daydayup.day15_lianxi.model.GoodsListBean;
import com.daydayup.day15_lianxi.model.ModelImpl;
import com.daydayup.day15_lianxi.presenter.PresenterImpl;

import java.util.List;

public class MainActivity extends AppCompatActivity implements IMainView, View.OnClickListener {
    private static final String TAG = "MainActivity-----";
    private RecyclerView recyclerView;
    private MySearchView mySearchView;
    private TextView sousuo;
    private PresenterImpl presenter;
    private boolean flag = true;
    private ImageView change;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化界面
        initViews();
        //初始化数据
        initDatas();
    }

    private void initDatas() {
        presenter = new PresenterImpl();
        presenter.showGoodsListToView(new ModelImpl(), this);
    }

    private void initViews() {
        recyclerView = findViewById(R.id.recyclerView);
        mySearchView = findViewById(R.id.mysearch);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        sousuo = findViewById(R.id.sousuo);
        sousuo.setOnClickListener(this);

        change = findViewById(R.id.change);
        change.setOnClickListener(this);
    }

    //显示商品列表
    @Override
    public void showGoodsList(List<GoodsListBean.DataBean> list) {
        Log.d(TAG, "showGoodsList: " + list);
        MyAdapter myAdapter = new MyAdapter(MainActivity.this, list);
        recyclerView.setAdapter(myAdapter);
    }

    @Override
    public String getContent() {
        String content = mySearchView.getContent();
        if (TextUtils.isEmpty(content)) {
            content = "笔记本";
        }
        return content;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.sousuo:

                presenter.showGoodsListToView(new ModelImpl(), this);

                break;

            case R.id.change:

                if (flag) {
                    recyclerView.setLayoutManager(new GridLayoutManager(MainActivity.this, 2));
                    change.setImageResource(R.drawable.kind_liner);
                } else {
                    recyclerView.setLayoutManager(new LinearLayoutManager(this));
                    change.setImageResource(R.drawable.kind_grid);
                }
                flag = !flag;
                break;
        }
    }
}

MySearchView

import android.content.Context;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;

import com.daydayup.day15_lianxi.R;

/**
 * 1.组合控件
 * 将原有的控件组合起来成为一个整体---控件
 * <p>
 * 1.根据需求,写布局文件
 * 2.布局文件---View
 * 3.逻辑
 * <p>
 * 2.自定义View
 * 3.自定义ViewGroup
 * <p>
 * 构造
 * onDraw
 * 绘制,文字,图片,颜色,形状
 * onMeasure
 * 测量
 * onLayout
 * 布局
 * onSizeChange
 * 当控件大小改变是调用
 * onTouchEvent
 * 处理触摸事件
 */

public class MySearchView extends LinearLayout {

    private EditText search_content;

    //1.
    //直接new的时候
    public MySearchView(Context context) {
        this(context, null);
    }

    public MySearchView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }

    //在布局文件里面时候控件的时候
    public MySearchView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        //初始化
        View view = View.inflate(context, R.layout.layout_search, this);
        search_content = view.findViewById(R.id.search_content);
//        search_content.setOnClickListener(new OnClickListener() {
//            @Override
//            public void onClick(View v) {
//                search_content.setFocusable(true);
//            }
//        });
    }

    //获取输入的内容

    public String getContent() {
        return search_content.getText().toString();
    }

}


SplashActivity
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

import com.daydayup.day15_lianxi.R;

public class SplashActivity extends AppCompatActivity {

    private int width;
    private int height;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_splash2);
        //获取屏幕宽高
        WindowManager wm = (WindowManager) this
                .getSystemService(Context.WINDOW_SERVICE);
        width = wm.getDefaultDisplay().getWidth();
        height = wm.getDefaultDisplay().getHeight();

        //初始化页面
        initViews();
    }

    private void initViews() {
        ImageView imageView=findViewById(R.id.splash_pic);
        //属性动画
        ObjectAnimator translationY = ObjectAnimator.ofFloat(imageView, "translationY", 0, height / 2);
        ObjectAnimator scaleX = ObjectAnimator.ofFloat(imageView, "scaleX", 2, 1);
        ObjectAnimator scaleY = ObjectAnimator.ofFloat(imageView, "scaleY", 2, 1);
        ObjectAnimator alpha = ObjectAnimator.ofFloat(imageView, "alpha", 0, 1);
        ObjectAnimator rotation = ObjectAnimator.ofFloat(imageView, "rotation", 360);

        //添加到动画集合
        AnimatorSet animatorSet = new AnimatorSet();
        animatorSet.playTogether(translationY,scaleX,scaleY,alpha,rotation);

        //设置
        animatorSet.setDuration(3000);
        animatorSet.start();
        animatorSet.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {

            }

            @Override
            public void onAnimationEnd(Animator animation) {
                //动画结束的时候,跳转页面
                Intent intent = new Intent(SplashActivity.this, MainActivity.class);
                startActivity(intent);
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });

    }
}











<think>根据用户的问题,他希望在点击RecyclerView的条目后,根据条目的id跳转到对应的详情页面。这通常涉及到在点击事件中获取条目的唯一标识(如数据库id或其他唯一值),并通过Intent将id传递给详情页,然后在详情页根据id加载数据。考虑到之前已经介绍了三种添加点击事件的方法,这里推荐使用第一种方法(在ViewHolder内实现),因为:1.避免在onBindViewHolder中重复设置监听器2.将点击逻辑与视图绑定放在一起,结构更清晰具体步骤:1.在Adapter中,确保数据对象包含一个唯一标识(例如id)2.在ViewHolder中设置点击事件,当点击时,通过回调将id传递给Activity3.在Activity中接收回调,根据id启动对应的详情页另外,考虑到RecyclerView可能有多种条目类型(例如不同ViewType),我们可以通过接口回调来实现,这样不同条目类型可以有不同的处理。下面给出一个完整示例:1.定义点击事件的回调接口(在Adapter内部定义):```javapublicclassMyAdapterextendsRecyclerView.Adapter<MyAdapter.ViewHolder>{//...其他代码//定义回调接口publicinterfaceOnItemClickListener{voidonItemClick(longid);//参数为条目的唯一id}privateOnItemClickListenerlistener;//设置监听器publicvoidsetOnItemClickListener(OnItemClickListenerlistener){this.listener=listener;}//在ViewHolder中使用publicclassViewHolderextendsRecyclerView.ViewHolder{publicViewHolder(ViewitemView){super(itemView);itemView.setOnClickListener(v->{if(listener!=null){intposition=getAdapterPosition();if(position!=RecyclerView.NO_POSITION){//从数据源中获取当前条目的idlongid=dataList.get(position).getId();listener.onItemClick(id);}}});}}}```2.在Activity中设置监听器并处理跳转:```javapublicclassMainActivityextendsAppCompatActivityimplementsMyAdapter.OnItemClickListener{privateRecyclerViewrecyclerView;privateMyAdapteradapter;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//引用布局[^1]recyclerView=findViewById(R.id.rv_movies);//注意:这里引用[1]中的RecyclerView的id是rv_movies,用户可以根据自己布局修改adapter=newMyAdapter(getSampleData());adapter.setOnItemClickListener(this);//设置点击监听器recyclerView.setAdapter(adapter);//设置布局管理器等}//实现接口方法@OverridepublicvoidonItemClick(longid){//跳转到详情页,传递idIntentintent=newIntent(this,DetailActivity.class);intent.putExtra("ITEM_ID",id);startActivity(intent);}}```3.在详情页(DetailActivity)中获取id并加载数据:```javapublicclassDetailActivityextendsAppCompatActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_detail);longitemId=getIntent().getLongExtra("ITEM_ID",-1);if(itemId!=-1){//根据itemId加载数据并展示loadData(itemId);}}privatevoidloadData(longid){//例如:从数据库或网络根据id获取数据}}```注意事项:1.确保在Adapter的数据模型中有一个唯一的id字段(例如从数据库获取的id)。2.使用intent传递数据时,注意数据大小限制,如果数据量很大,建议只传递id,然后在详情页重新加载数据。3.如果使用Fragment,可以通过Fragmentarguments传递id。另外,如果使用ViewModel和LiveData(如引用[2]中提到的),也可以在详情页的ViewModel中根据id获取数据。关于长按事件:可以通过类似的方式,在ViewHolder中添加长按监听,然后定义长按回调接口。参考引用:布局文件引用:activity_main.xml中的RecyclerView(id为rv_movies)[^1]相关问题:1.如何实现RecyclerView条目的长按事件?2.如何在RecyclerView中为不同ViewType的条目设置不同的点击事件?3.使用Intent传递数据时需要注意什么?4.在Fragment中如何传递数据到另一个Fragment?5.如何优化RecyclerView点击事件处理性能?</think> ### 📱 实现 RecyclerView 点击条目根据 ID 跳转页面的步骤 以下是实现点击后根据 ID 导航的核心方案(推荐在 ViewHolder 内实现点击事件): #### ✅ 完整实现步骤 1. **在 ViewHolder 中设置点击监听** ```java // 自定义 Adapter 内 public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { // 1. 定义点击回调接口 public interface OnItemClickListener { void onItemClick(long itemId); // 通过ID跳转 } private OnItemClickListener listener; private List<ItemData> dataList; // 数据源 // 2. 设置监听器的方法 public void setOnItemClickListener(OnItemClickListener listener) { this.listener = listener; } public class ViewHolder extends RecyclerView.ViewHolder { public ViewHolder(View itemView) { super(itemView); // 3. 设置条目点击 itemView.setOnClickListener(v -> { int position = getAdapterPosition(); if (position != RecyclerView.NO_POSITION && listener != null) { // 4. 获取当前条目的ID long itemId = dataList.get(position).getId(); listener.onItemClick(itemId); } }); } } } ``` 2. **在 Activity/Fragment 中处理跳转** ```java // MainActivity.java public class MainActivity extends AppCompatActivity implements MyAdapter.OnItemClickListener { private RecyclerView recyclerView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 引用布局[^1] recyclerView = findViewById(R.id.rv_movies); // [^1]的RecyclerView ID MyAdapter adapter = new MyAdapter(getData()); // 5. 设置点击监听器 adapter.setOnItemClickListener(this); recyclerView.setAdapter(adapter); } // 6. 实现点击回调 @Override public void onItemClick(long itemId) { // 7. 根据ID跳转页面 Intent intent = new Intent(this, DetailActivity.class); intent.putExtra("ITEM_ID", itemId); // 传递ID startActivity(intent); } } ``` 3. **在目标页面接收 ID** ```java // DetailActivity.java public class DetailActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); // 8. 获取传递的ID long itemId = getIntent().getLongExtra("ITEM_ID", -1); if(itemId != -1) { // 9. 根据ID加载数据 loadData(itemId); } } private void loadData(long id) { // 根据ID从数据库/网络获取数据 } } ``` #### ⚠️ 关键注意事项 1. **数据源要求**:确保每个数据对象有唯一 ID 字段,建议使用数据库主键或 UUID 2. **布局规范**:在 XML 中给 RecyclerView 设置正确 ID,如引用[1]的 `rv_movies`[^1] 3. **位置验证**:必须检查 `getAdapterPosition() != RecyclerView.NO_POSITION` 4. **数据传递**:使用 `Intent.putExtra()` 传递 ID 而非整个对象 5. **性能优化**:推荐使用 `ListAdapter` 替代 `RecyclerView.Adapter`(如引用[3]建议)[^3] #### 🔁 数据加载流程图 ```mermaid graph TD A[点击RecyclerView条目] --> B[获取条目ID] B --> C[通过Intent传递ID] C --> D[目标Activity接收ID] D --> E[根据ID查询数据源] E --> F[展示详情内容] ``` ### 💡 相关问题 1. 如何在 Fragment 之间传递 ID 并导航(参考引用[4]的共享元素)[^4]? 2. 使用 ViewModel 如何实现 ID 到数据的转换(参考引用[2]的数据绑定)[^2]? 3. RecyclerView 点击动画如何与页面跳转动画结合? 4. 如何防止快速点击导致多次跳转? 5. 传递 ID 时如何保证类型安全(使用 Parcelable 替代 long)?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值