android的MVP展示+詳情頁面+高德定位+顯示藍點

1.首先:添加依賴

  // xRecelrview依賴
  compile 'com.jcodecraeer:xrecyclerview:1.3.2'
  //    Glide依賴
  compile 'com.github.bumptech.glide:glide:3.7.0'
  //    okhttp依賴
  compile 'com.squareup.okhttp3:okhttp:3.3.0'

2.添加權限

(1)、平時用到的權限:網絡權限、可讀、可寫

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

(2)、高德地圖的權限

<!-- 用於進行網絡定位 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 用於訪問GPS定位 -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 用於獲取運營商信息,用於支持提供運營商信息相關的接口 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!-- 用於訪問網絡,網絡定位需要上網 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 用於讀取手機當前的狀態 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 用於寫入緩存數據到擴展存儲卡 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 用於申請調用A-GPS模塊 -->
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
    <!-- 用於申請獲取藍牙信息進行室內定位 -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

3、添加高德解壓包的離線依賴

 //gson解析
 compile files('libs/gson-2.2.4.jar')
 //高德定位
 compile files('libs/AMap_Location_V3.8.0_20180201.jar')
 //高德顯示地圖
 compile files('libs/Amap_2DMap_V5.2.0_20170627.jar')

4.還要在application裏面添加 自己創建應用的 appkey 和 service

代碼如下:

注意:value的值就是 自己的appkey

<service android:name="com.amap.api.location.APSService" />

<meta-data
android:name="com.amap.api.v2.apikey"
android:value="b8709b716b236306437c30ba711c7d56"></meta-data>

具體操作如下:

這裏寫圖片描述

接下來正式開始寫代碼:

一、需要用到的所有佈局

1.MainActivity的佈局:(展示商品列表)

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.bwei.lenovo.day0402_yuekao1.MainActivity">

   <com.jcodecraeer.xrecyclerview.XRecyclerView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/xrecylerview"></com.jcodecraeer.xrecyclerview.XRecyclerView>

</LinearLayout>

2.展示商品列表的item佈局

<?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="horizontal">

    <ImageView
        android:id="@+id/item_img"
        android:layout_width="100dp"
        android:layout_height="100dp" />

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

    <TextView
        android:id="@+id/item_title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="標題"
        android:textSize="25sp" />

    <TextView
        android:layout_marginTop="5dp"
        android:id="@+id/item_price"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="價格" />

    </LinearLayout>
</LinearLayout>

3.詳情頁面的佈局 (detaile)

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.bwei.lenovo.day0402_yuekao1.activity.DetailActivity">

    <ImageView
        android:id="@+id/detail_img"
        android:layout_width="match_parent"
        android:layout_height="500dp"></ImageView>

    <TextView
        android:text="標題"
        android:textSize="25sp"
        android:id="@+id/detail_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:text="價格"
        android:textColor="#f00"
        android:id="@+id/detail_price"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:text="地址"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/detail_adress"/>
</LinearLayout>

4.顯示地圖的佈局 2D(高德)

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.bwei.lenovo.day0402_yuekao1.activity.MyAddressActivity">

    <com.amap.api.maps2d.MapView

        android:id="@+id/map"

        android:layout_width="match_parent"

        android:layout_height="match_parent"/>

</LinearLayout>

二、http包

1.HttpConfig包下->接口路徑

package com.bwei.lenovo.day0402_yuekao1.http;

public class HttpConfig {
    //展示列表
    public static String base_url="https://www.zhaoapi.cn/product/getProducts";
}

2.okHttpUtils工具類 (OKHttpUtils )

package com.bwei.lenovo.day0402_yuekao1.http;

import android.os.Handler;
import android.os.Message;

import java.io.IOException;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class OKHttpUtils {

    private static OKHttpUtils okHttpUtils = null;
    private MyViewHolder myViewHolder = new MyViewHolder();
    private OkLoadLinstener okLoadLinstener;

    public static OKHttpUtils getInstance() {
        if (okHttpUtils == null) {
            okHttpUtils = new OKHttpUtils();
        }
        return okHttpUtils;
    }

    public void okGet(String url) {
        OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
        Request request = new Request.Builder().url(url).build();
        Call call = okHttpClient.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Message message = myViewHolder.obtainMessage();
                message.what = 1;
                message.obj = e.getMessage();
                myViewHolder.sendMessage(message);
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                Message message = myViewHolder.obtainMessage();
                message.what = 0;
                message.obj = response.body().string();
                myViewHolder.sendMessage(message);
            }
        });
    }

    //攔截器、‘
    class MyIntercepter implements Interceptor{

        @Override
        public Response intercept(Chain chain) throws IOException {

            Request request = chain.request();
            String method = request.method();
            //判斷請求網絡的方法是get的話
            if (method.equals("GET")){
                String url= request.url().toString();
                url=url+"&source=android";
                Request newRequest= request.newBuilder().url(url).build();
                Response response = chain.proceed(newRequest);
                return response;

            }else if (method.equals("POST")){
                RequestBody body = request.body();
                if (body instanceof FormBody){
                    FormBody.Builder builder = new FormBody.Builder();
                    for (int i=0;i<((FormBody) body).size();i++){
                        String name = ((FormBody) body).name(i);
                        String value = ((FormBody) body).value(i);
                        builder.add(name,value);
                    }
                    builder.add("source","android");
                    FormBody formBody = builder.build();
                    Request request1 = request.newBuilder().post(formBody).build();
                    Response response = chain.proceed(request1);
                    return response;
                }

            }
            return null;
        }
    }


   //handler
    class MyViewHolder extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                //成功
                case 0:
                    String json = (String) msg.obj;
                    okLoadLinstener.okLoadSuccess(json);
                    break;
                //失敗
                case 1:
                   String error= (String) msg.obj;
                    okLoadLinstener.okLoadError(error);
                    break;
            }
        }
    }

    //定義一個供外部調用的方法
    public void SetOnLoadLinstener(OkLoadLinstener okLoadLinstener) {
        this.okLoadLinstener = okLoadLinstener;
    }
}

3.okHttpUtils工具類用到的網絡 接口回調 (OkLoadLinstener )

package com.bwei.lenovo.day0402_yuekao1.http;

public interface OkLoadLinstener {
    //成功
    void okLoadSuccess(String jaon);

    //失敗
    void okLoadError(String error);
}

三、view包

1.view包下的 IView接口

package com.bwei.lenovo.day0402_yuekao1.view;

import com.bwei.lenovo.day0402_yuekao1.bean.GoodsBean;

import java.util.List;

public interface IView {
    //展示商品列表
    void showGoodsList(List<GoodsBean.DataBean> list);
}

四、model包

1.model包下的 監聽事件 ( GetGoodsListLinstener )

package com.bwei.lenovo.day0402_yuekao1.model;

/**
 *     //監聽事件
 */
public interface GetGoodsListLinstener {
    //成功
    void getGoodsListSuccess(String json);
    //失敗
    void getGoodsListError(String error);
}

}

2.model包下的 ( IModel )接口

package com.bwei.lenovo.day0402_yuekao1.model;

public interface IModel {

void getGoodsList(String url,GetGoodsListLinstener getGoodsListLinstener);

}

3.model包下的 IModel 的實現類(IModelmpI )

package com.bwei.lenovo.day0402_yuekao1.model;

import com.bwei.lenovo.day0402_yuekao1.http.OKHttpUtils;
import com.bwei.lenovo.day0402_yuekao1.http.OkLoadLinstener;

/**
 * 請求網絡
 */

public class IModelmpI implements IModel {
    @Override
    public void getGoodsList(String url, final GetGoodsListLinstener getGoodsListLinstener) {
        OKHttpUtils instance = OKHttpUtils.getInstance();
        //get請求
        instance.okGet(url);
        instance.SetOnLoadLinstener(new OkLoadLinstener() {
            @Override
            public void okLoadSuccess(String jaon) {
                //成功
                getGoodsListLinstener.getGoodsListSuccess(jaon);
            }

            @Override
            public void okLoadError(String error) {
                //失敗
                getGoodsListLinstener.getGoodsListError(error);
            }
        });
    }
}

五、presenter層

1.p層的接口 (IPresenter )

package com.bwei.lenovo.day0402_yuekao1.presenter;

import com.bwei.lenovo.day0402_yuekao1.model.IModel;
import com.bwei.lenovo.day0402_yuekao1.view.IView;


public interface IPresenter {

    void getGoodsView(IModel iModel, IView iView);
}

2.P層接口的實現類 (IPresenterImpI )

package com.bwei.lenovo.day0402_yuekao1.presenter;

import android.util.Log;

import com.bwei.lenovo.day0402_yuekao1.bean.GoodsBean;
import com.bwei.lenovo.day0402_yuekao1.http.HttpConfig;
import com.bwei.lenovo.day0402_yuekao1.model.GetGoodsListLinstener;
import com.bwei.lenovo.day0402_yuekao1.model.IModel;
import com.bwei.lenovo.day0402_yuekao1.view.IView;
import com.google.gson.Gson;

import java.util.List;

/**
 * 邏輯操作
 */

public class IPresenterImpI implements IPresenter {
    @Override
    public void getGoodsView(IModel iModel, final IView iView) {
        //拼接路徑
        String url = HttpConfig.base_url + "?pscid=1";
        iModel.getGoodsList(url, new GetGoodsListLinstener() {
            @Override
            public void getGoodsListSuccess(String json) {
                Log.d("IPresenterImpI", "-P層獲取到集合---------"+json);
                //解析數據
                Gson gson=new Gson();
                GoodsBean goodsBean = gson.fromJson(json, GoodsBean.class);
                List<GoodsBean.DataBean> list = goodsBean.getData();
                iView.showGoodsList(list);
            }

            @Override
            public void getGoodsListError(String error) {
                Log.d("IPresenterImpI", "p層獲取的異常-----------"+error);
            }
        });
    }
}

六、需要用的Activity

1.展示數據的 MainActivity

package com.bwei.lenovo.day0402_yuekao1;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.util.Log;
import android.view.View;

import com.bwei.lenovo.day0402_yuekao1.activity.DetailActivity;
import com.bwei.lenovo.day0402_yuekao1.adpter.MyAdapter;
import com.bwei.lenovo.day0402_yuekao1.bean.GoodsBean;
import com.bwei.lenovo.day0402_yuekao1.model.IModelmpI;
import com.bwei.lenovo.day0402_yuekao1.presenter.IPresenterImpI;
import com.bwei.lenovo.day0402_yuekao1.view.IView;
import com.jcodecraeer.xrecyclerview.XRecyclerView;

import java.util.List;

public class MainActivity extends AppCompatActivity implements IView {

    private XRecyclerView xRecyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化數據
        initviews();
    }

    private void initviews() {
        xRecyclerView = (XRecyclerView) findViewById(R.id.xrecylerview);
        //設置佈局管理器
        xRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        IPresenterImpI iPresenterImpI = new IPresenterImpI();
        iPresenterImpI.getGoodsView(new IModelmpI(), this);
    }

    //---------------------------重寫的IView方法-------------------------------------------
    @Override
    public void showGoodsList(final List<GoodsBean.DataBean> list) {
        Log.d("MainActivity", "MainAcvity獲取到集合------" + list);
        MyAdapter myAdapter = new MyAdapter(this, list);
        xRecyclerView.setAdapter(myAdapter);

        myAdapter.setOnMyitemClick(new MyAdapter.MyItemClickLinstener() {
            @Override
            public void onMyItemClick(View view, int poistion, int pscid) {
                //跳轉詳情頁面
                GoodsBean.DataBean dataBean = list.get(poistion);
                Intent intent = new Intent(MainActivity.this, DetailActivity.class);
                intent.putExtra("goodsbean", dataBean);
                startActivity(intent);
            }
        });
    }
}

2.詳情頁面的Activity (DetailActivity )

裏面有高德定位 和 詳情展示

package com.bwei.lenovo.day0402_yuekao1.activity;

import android.content.Intent;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.bumptech.glide.Glide;
import com.bwei.lenovo.day0402_yuekao1.R;
import com.bwei.lenovo.day0402_yuekao1.bean.GoodsBean;

import java.io.Serializable;

public class DetailActivity extends AppCompatActivity {

    private ImageView detail_img;
    private TextView detail_title;
    private TextView detail_price;
    private TextView detail_adress;
    public AMapLocationClient mLocationClient = null;

    //聲明定位回調監聽器
     //    public AMapLocationListener mLocationListener = new AMapLocationListener();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        detail_img = (ImageView) findViewById(R.id.detail_img);
        detail_title = (TextView) findViewById(R.id.detail_title);
        detail_price = (TextView) findViewById(R.id.detail_price);
        detail_adress = (TextView) findViewById(R.id.detail_adress);
        detail_adress.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(DetailActivity.this, MyAddressActivity.class);
                startActivity(intent);
            }
        });
        //詳情頁面的數據
        initDatas();
        //高德定位
        initApi();
    }

    private void initApi() {
        //聲明AMapLocationClient類對象

         //初始化定位
        mLocationClient = new AMapLocationClient(getApplicationContext());
        //設置定位回調監聽
        mLocationClient.setLocationListener(mAMapLocationListener);

        //聲明AMapLocationClientOption對象
        AMapLocationClientOption mLocationOption = null;
        //初始化AMapLocationClientOption對象
        mLocationOption = new AMapLocationClientOption();
        AMapLocationClientOption option = new AMapLocationClientOption();
        /**
         * 設置定位場景,目前支持三種場景(簽到、出行、運動,默認無場景)
         */
        option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
        if(null != mLocationClient){
            mLocationClient.setLocationOption(option);
            //設置場景模式後最好調用一次stop,再調用start以保證場景模式生效
            mLocationClient.stopLocation();
            mLocationClient.startLocation();
        }
        //設置定位模式爲AMapLocationMode.Hight_Accuracy,高精度模式。
        mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
        //設置定位間隔,單位毫秒,默認爲2000ms,最低1000ms。
        mLocationOption.setInterval(1000);

         //設置是否返回地址信息(默認返回地址信息)
        mLocationOption.setNeedAddress(true);

       //給定位客戶端對象設置定位參數
        mLocationClient.setLocationOption(mLocationOption);
       //啓動定位
        mLocationClient.startLocation();
    }

    AMapLocationListener mAMapLocationListener = new AMapLocationListener() {
        @Override
        public void onLocationChanged(AMapLocation amapLocation) {
            if (amapLocation != null) {
                if (amapLocation.getErrorCode() == 0) {
                //可在其中解析amapLocation獲取相應內容。
                    Log.d("DetailActivity", "----定位成功----------");
                    String street = amapLocation.getStreet();
                    String address = amapLocation.getAddress();
                    Log.d("DetailActivity", "-----------"+street);
                    Log.d("DetailActivity", "-----------"+address);
                    //將地址顯示出來
                    detail_adress.setText(address);

                }else {
                    //定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因,errInfo是錯誤信息,詳見錯誤碼錶。
                    Log.e("AmapError","location Error, ErrCode:"
                            + amapLocation.getErrorCode() + ", errInfo:"
                            + amapLocation.getErrorInfo());
                }
            }
        }
    };


    //詳情頁的數據
    private void initDatas() {
        Intent intent = getIntent();
        GoodsBean.DataBean dataBean = (GoodsBean.DataBean) intent.getSerializableExtra("goodsbean");
        detail_title.setText(dataBean.getTitle());
        detail_price.setText(dataBean.getPrice() + "");
        detail_price.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
        String detail_url = dataBean.getImages().split("\\|")[0];
        Glide.with(DetailActivity.this).load(detail_url).into(detail_img);
    }


}

3.顯示地圖 定位小藍點 (MyAddressActivity )

package com.bwei.lenovo.day0402_yuekao1.activity;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.amap.api.maps2d.AMap;
import com.amap.api.maps2d.MapView;
import com.amap.api.maps2d.model.MyLocationStyle;
import com.bwei.lenovo.day0402_yuekao1.R;


public class MyAddressActivity extends AppCompatActivity {

    private MapView mMapView;
    AMap aMap = null;

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

        //獲取地圖控件引用
        mMapView = (MapView) findViewById(R.id.map);
        //在activity執行onCreate時執行mMapView.onCreate(savedInstanceState),創建地圖
        mMapView.onCreate(savedInstanceState);
        if (aMap == null) {
            aMap = mMapView.getMap();
        }
        //定位藍點的方法
        initApi();
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity執行onDestroy時執行mMapView.onDestroy(),銷燬地圖
        mMapView.onDestroy();
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity執行onResume時執行mMapView.onResume (),重新繪製加載地圖
        mMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity執行onPause時執行mMapView.onPause (),暫停地圖的繪製
        mMapView.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        //在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),保存地圖當前的狀態
        mMapView.onSaveInstanceState(outState);
        //初始化地圖控制器對象


    }

    private void initApi() {
        MyLocationStyle myLocationStyle;
        myLocationStyle = new MyLocationStyle();//初始化定位藍點樣式類myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,並且會跟隨設備移動。(1秒1次定位)如果不設置myLocationType,默認也會執行此種模式。
        myLocationStyle.interval(2000); //設置連續定位模式下的定位間隔,只在連續定位模式下生效,單次定位模式下不會生效。單位爲毫秒。
        aMap.setMyLocationStyle(myLocationStyle);//設置定位藍點的Style
        //aMap.getUiSettings().setMyLocationButtonEnabled(true);設置默認定位按鈕是否顯示,非必需設置。
        aMap.setMyLocationEnabled(true);// 設置爲true表示啓動顯示定位藍點,false表示隱藏定位藍點並不進行定位,默認是false。

        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW);//連續定位、且將視角移動到地圖中心點,定位藍點跟隨設備移動。(1秒1次定位)
        //設置顯示定位藍點
        myLocationStyle.showMyLocation(true);///設置是否顯示定位小藍點,用於滿足只想使用定位,不想使用定位小藍點的場景,設置false以後圖面上不再有定位藍點的概念,但是會持續回調位置信息。

        myLocationStyle.strokeColor(Color.BLUE);//設置定位藍點精度圓圈的邊框顏色的方法。
        myLocationStyle.radiusFillColor(Color.BLUE);//
        myLocationStyle.strokeWidth(100);//設置定位藍點精度圈的邊框寬度的方法。

    }
}

七、展示商品列表的Adapter (MyAdapter )

package com.bwei.lenovo.day0402_yuekao1.adpter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bwei.lenovo.day0402_yuekao1.R;
import com.bwei.lenovo.day0402_yuekao1.bean.GoodsBean;
import com.bwei.lenovo.day0402_yuekao1.model.IModel;

import java.util.List;

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {

    Context context;
    List<GoodsBean.DataBean> list;
    private MyItemClickLinstener myItemClickLinstener;

    public MyAdapter(Context context, List<GoodsBean.DataBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View inflate = View.inflate(context, R.layout.layout_item, null);
        MyViewHolder myViewHolder = new MyViewHolder(inflate);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, final int position) {
        holder.getItem_title().setText(list.get(position).getTitle());
        holder.getItem_price().setText(list.get(position).getPrice() + "");
        String image_url = list.get(position).getImages().split("\\|")[0];
        Glide.with(context).load(image_url).into(holder.getItem_img());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                myItemClickLinstener.onMyItemClick(view,position,list.get(position).getPscid());
            }
        });
    }

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

    class MyViewHolder extends RecyclerView.ViewHolder {

        private final ImageView item_img;
        private final TextView item_title;
        private final TextView item_price;

        public MyViewHolder(View itemView) {
            super(itemView);
            item_img = itemView.findViewById(R.id.item_img);
            item_title = itemView.findViewById(R.id.item_title);
            item_price = itemView.findViewById(R.id.item_price);
        }

        public MyViewHolder(View itemView, ImageView item_img, TextView item_title, TextView item_price) {
            super(itemView);
            this.item_img = item_img;
            this.item_title = item_title;
            this.item_price = item_price;
        }

        public ImageView getItem_img() {
            return item_img;
        }

        public TextView getItem_title() {
            return item_title;
        }

        public TextView getItem_price() {
            return item_price;
        }
    }

    //定義自己的item事件
    public interface MyItemClickLinstener {
        void onMyItemClick(View view,int poistion,int pscid);
    }

    //供外部調用的方法
    public void setOnMyitemClick(MyItemClickLinstener myItemClickLinstener) {
        this.myItemClickLinstener = myItemClickLinstener;
    }
}

八、bean類

1.把bean類貼出來的目的,是怕大家忘了實現序列化,因爲詳情頁傳的是對象,不要忘記哦

package com.bwei.lenovo.day0402_yuekao1.bean;

import java.io.Serializable;
import java.util.List;

public class GoodsBean implements Serializable{

    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 implements Serializable{

        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;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章