homeFragment.onHomeSuccess(nearbySellerList, otherSellerList)
} else {
//无数据,异常页面
homeFragment.onHomeFailed()
}
}
}
}
override fun onFailure(call: Call?, t: Throwable?) {
//失败
Log.d(“HomeFragmentPresenster”, “onFailure=====” + t.toString())
}
})
}
}
HomeRvAdapter.kt负责adapter每一个条目的刷新,这里对于大list条目只是设置了一个TextView
package com.example.takeout.ui.adapter
import android.content.Context
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.daimajia.slider.library.SliderLayout
import com.daimajia.slider.library.SliderTypes.TextSliderView
import com.example.takeout.R
import com.heima.takeout.model.beans.Seller
import org.jetbrains.anko.find
class HomeRvAdapter(val context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
//定义常量
companion object {
val TYPE_TITLE = 0
val TYPE_SELLER = 1
}
var mDatas: ArrayList = ArrayList()
fun setData(data: ArrayList) {
this.mDatas = data
notifyDataSetChanged()
}
/**
- 不同position对应不同类型
*/
override fun getItemViewType(position: Int): Int {
if (position == 0) {
return TYPE_TITLE
} else {
return TYPE_SELLER
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val viewType = getItemViewType(position)
when (viewType) {
TYPE_TITLE -> (holder as TitleHolder).bindData(“我是title----------------------------------------”)
TYPE_SELLER -> (holder as SellerHolder).bindData(mDatas[position - 1])
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
when (viewType) {
TYPE_TITLE -> return TitleHolder(View.inflate(context, R.layout.item_title, null))
TYPE_SELLER -> return SellerHolder(View.inflate(context, R.layout.item_seller, null))
else -> return TitleHolder(View.inflate(context, R.layout.item_home_common, null))
}
}
override fun getItemCount(): Int {
if (mDatas.size > 0) {
return mDatas.size + 1
} else {
return 0
}
}
//内部类,商家的holder
inner class SellerHolder(item: View) : RecyclerView.ViewHolder(item) {
val tvTitle: TextView
init {
tvTitle = item.find(R.id.tv_title)
}
fun bindData(seller: Seller) {
tvTitle.text = seller.name
}
}
//存放图片的url和名称
var url_maps: HashMap<String, Int> = HashMap()
//内部类,title的holder
inner class TitleHolder(item: View) : RecyclerView.ViewHolder(item) {
val sliderLayout: SliderLayout
init {
sliderLayout = item.findViewById(R.id.slider)
}
fun bindData(data: String) {
if (url_maps.size == 0) {
url_maps.put(“Hannibal”, R.mipmap.pic1);
url_maps.put(“Big Bang Theory”, R.mipmap.pic2);
url_maps.put(“House of Cards”, R.mipmap.pic3);
url_maps.put(“Game of Thrones”, R.mipmap.pic4);
for ((key, value) in url_maps) {
val textSlideView: TextSliderView = TextSliderView(context)
textSlideView.description(key).image(value)
sliderLayout.addSlider(textSlideView)
}
}
}
}
}
TakeoutService.kt是Retrofit请求的service
package com.example.takeout.model.net
import retrofit2.Call
import retrofit2.http.GET
interface TakeoutService {
//ex. @GET(“users/{user}/repos”)
//ex. fun listRepos(@Path(“user”) user: String): Call<List>
@GET(“takeout?index=0”)
fun getHomeInfo(): Call
}
ResponseInfo.kt服务器返回的数据,这里2种数据都是list类型的数据
package com.example.takeout.model.net
import com.heima.takeout.model.beans.Seller
class ResponseInfo {
//服务器开发者定义的数据结构
var code: String = “”
lateinit var nearbySellerList:List
lateinit var otherSellerList:List
}
Seller.kt数据的bean对象
package com.heima.takeout.model.beans
import android.content.pm.ActivityInfo
import java.io.Serializable
import java.util.*
data class Seller(var id: Long, var pic: String, var name: String, var score: String, var sale: String,
var ensure: String, var invoice: String, var sendPrice: String, var deliveryFee: String,
var recentVisit: String, var distance: String, var time: String, var icon: String,
var activityList: ArrayList) : Serializable{
// var id: Long = 0
// var pic: String? = null
// var name: String? = null
//
// var score: String? = null
// var sale: String? = null
// var ensure: String? = null
//
// var invoice: String? = null
// var sendPrice: String? = null
// var deliveryFee: String? = null
//
// var recentVisit: String? = null
// var distance: String? = null
// var time: String? = null
//
// var icon: String? = null
//
// var activityList: ArrayList? = null
}
Json数据takeInfors
{
“nearbySellerList”: [
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 1,
“invoice”: " ",
“name”: “其他第1家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 2,
“invoice”: " ",
“name”: “其他第2家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 3,
“invoice”: " ",
“name”: “其他第3家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 4,
“invoice”: " ",
“name”: “其他第4家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 5,
“invoice”: " ",
“name”: “其他第5家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 6,
“invoice”: " ",
“name”: “其他第6家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 7,
“invoice”: " ",
“name”: “其他第7家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 8,
“invoice”: " ",
“name”: “其他第8家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 9,
“invoice”: " ",
“name”: “其他第9家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 10,
“invoice”: " ",
“name”: “其他第10家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 11,
“invoice”: " ",
“name”: “其他第11家分店”,
“pic”: “”,
“recentVisit”: “”,
“sale”: “月售8份”,
“score”: “4”,
“sendPrice”: “30”,
“time”: “”
},
{
“activityList”: “”,
“deliveryFee”: “6”,
“distance”: “996米/50分钟”,
“ensure”: “takeout/imgs/seller/3.jpg”,
“id”: 12,
“invoice”: " ",
“name”: “其他第12家分店”,
“pic”: “”,
“recentVisit”: “”,
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
推荐学习资料
- 脑图
由于文章篇幅问题点击链接查看详细文章以及获取学习笔记:GitHub
绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-TKQw27zV-1710666556064)]
[外链图片转存中…(img-ZT3wokHV-1710666556064)]
[外链图片转存中…(img-1QidGy6k-1710666556065)]
[外链图片转存中…(img-39TPbB9y-1710666556065)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-VvgwX9Kk-1710666556065)]
推荐学习资料
- 脑图
[外链图片转存中…(img-WYSl4cKO-1710666556066)]
[外链图片转存中…(img-MIsC4qkd-1710666556066)]
[外链图片转存中…(img-JOb0fLuV-1710666556066)]
由于文章篇幅问题点击链接查看详细文章以及获取学习笔记:GitHub