Koltin35,Android面试题2020中高级

class GoodsFragmentPresenter(val goodsFragment: GoodsFragment) : NetPresenter() {

var goodstypeList: List = arrayListOf()

//连接服务器拿到此商家所有商品

fun getBusinessInfo() {

val businessCall = takeoutService.getBusinessInfo()

businessCall.enqueue(callback)

}

override fun parserJson(json: String) {

val gson = Gson()

val jsoObj = JSONObject(json)

val allStr = jsoObj.getString("

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

list")

//商品类型的集合

goodstypeList = gson.fromJson(allStr, object : TypeToken<List>() {

}.type)

Log.e(“business”, “该商家一共有” + goodstypeList.size + “个类别商品”)

goodsFragment.onLoadBusinessSuccess(goodstypeList)

}

}

GoodsTypeInfo.kt商品的bean

package com.example.takeout.model.beans

class GoodsTypeInfo {

var id: Int = 0//商品类型id

var name: String = “”//商品类型名称

var info: String = “”//特价信息

var list: List = listOf()//商品列表

constructor() : super() {}

constructor(id: Int, name: String, info: String, list: List) : super() {

this.id = id

this.name = name

this.info = info

this.list = list

}

override fun toString(): String {

return “GoodsTypeInfo [id= i d , n a m e = id, name= id,name=name, info= i n f o , l i s t = info, list= info,list=list]”

}

var redDotCount: Int = 0

}

GoodsTypeRvAdapter.kt商品左侧主界面的RecycleView,其中使用FragmentActivity?来作为androidx下面的Context

package com.example.takeout.ui.adapter

import android.view.LayoutInflater

import android.view.View

import android.view.ViewGroup

import android.widget.TextView

import androidx.fragment.app.FragmentActivity

import androidx.recyclerview.widget.RecyclerView

import com.example.takeout.R

import com.example.takeout.model.beans.GoodsTypeInfo

import com.example.takeout.ui.fragment.GoodsFragment

import org.jetbrains.anko.find

class GoodsTypeRvAdapter(val context: FragmentActivity?, val goodsFragment: GoodsFragment) :

RecyclerView.Adapter<RecyclerView.ViewHolder>() {

var goodsTypeList: List = listOf()

fun setDatas(list: List) {

this.goodsTypeList = list

notifyDataSetChanged()

}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {

val itemView = LayoutInflater.from(context).inflate(R.layout.item_type, parent, false)

return GoodsTypeItemHolder(itemView)

}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {

val goodsTypeItemHolder = holder as GoodsTypeItemHolder

goodsTypeItemHolder.bindData(goodsTypeList.get(position), position)

}

override fun getItemCount(): Int {

return goodsTypeList.size

}

inner class GoodsTypeItemHolder(val item: View) : RecyclerView.ViewHolder(item) {

val tvType: TextView

init {

tvType = item.find(R.id.type)

}

fun bindData(goodsTypeInfo: GoodsTypeInfo, position: Int) {

tvType.text = goodsTypeInfo.name

}

}

}

TakeoutService.kt服务端的请求格式

package com.example.takeout.model.net

import retrofit2.Call

import retrofit2.http.GET

import rx.Observable

interface TakeoutService {

//ex. @GET(“users/{user}/repos”)

//ex. fun listRepos(@Path(“user”) user: String): Call<List>

//http://127.0.0.1:8090/takeout?index=0

@GET(“takeout?index=0”)

fun getHomeInfo(): Call

//http://127.0.0.1:8090/takelogin?index=0

@GET(“takelogin?index=0”)

fun loginByPhone(): Call

//http://127.0.0.1:8090/takeorder?index=0

@GET(“takeorder?index=0”)

fun getOrderList(): Call

//使用Rxjava组合的接口

//http://127.0.0.1:8090/takeorder?index=0

@GET(“takeorder?index=0”)

fun getOrderListByRxjava(): Observable

@GET(“takebusiness?index=0”)

fun getBusinessInfo(): Call

}

item_type.xml布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width=“match_parent”

android:clickable=“true”

android:layout_height=“wrap_content”

android:minHeight=“80dp”

android:background="#b9dedcdc"

android:orientation=“vertical”>

<TextView android:gravity=“center”

android:id="@+id/tvRedDotCount"

android:layout_marginTop=“5dp”

android:textColor="#fff"

android:text=“1”

android:visibility=“invisible”

android:layout_marginRight=“5dp”

android:textSize=“12sp”

android:background="@drawable/circle_red"

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_gravity=“right”

/>

<TextView

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_centerInParent=“true”

android:padding=“5dp”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当涉及到Android面试题时,高级级别的问题通常会涉及更深入的主题和技术。以下是一些可能的高级Android面试题及其答案: 1. 请解释一下Android中的四大组件。 答:Android中的四大组件是Activity、Service、BroadcastReceiver和ContentProvider。Activity用于用户界面的展示和交互,Service用于在后台执行长时间运行的任务,BroadcastReceiver用于接收和处理系统广播消息,ContentProvider用于数据共享和访问。 2. 请解释一下Android中的MVC、MVP和MVVM架构模式。 答:MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为模型(数据)、视图(用户界面)和控制器(逻辑处理)三个部分。MVP(Model-View-Presenter)是MVC的变体,将控制器替换为Presenter,使视图和模型之间的耦合更低。MVVM(Model-View-ViewModel)是一种新的架构模式,通过数据绑定实现视图和模型之间的通信。 3. 请解释一下Android中的内存泄漏以及如何避免。 答:内存泄漏是指应用程序中未使用的内存无法被垃圾回收器回收,导致内存占用不断增加。在Android中,常见的内存泄漏原因包括静态引用、匿名内部类、Handler引起的内存泄漏等。避免内存泄漏的方法包括及时释放资源、避免使用静态引用、避免匿名内部类等。 4. 请解释一下Android中的线程和线程间通信方式。 答:在Android中,可以使用Thread类或者HandlerThread类创建线程。线程间通信的方式包括使用Handler进行消息传递、使用AsyncTask进行异步任务处理、使用BroadcastReceiver进行广播消息传递等。 5. 请解释一下Android中的性能优化技巧。 答:Android性能优化的技巧包括减少内存使用、优化布局和绘制、使用合适的数据结构和算法、避免频繁的IO操作、使用缓存等。此外,还可以使用工具如Lint、TraceView和HierarchyViewer进行性能分析和调优。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值