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;
}
}
}