Android 垃圾分类APP(五)垃圾分类新闻展示

  • @date 2021/4/15 17:24

*/

public class TrashNewsResponse {

/**

  • code : 200

  • msg : success

  • newslist : [{“id”:“60bc69482712658255dcef1551721cec”,“ctime”:“2021-04-15 14:25”,“title”:“小区垃圾成山?垃圾分类,咱可不能松劲儿”,“description”:“再过半个月,《北京市生活垃圾管理条例》实施就将迎来一周年。在将近一年的时间里,北京生活垃圾分类进行得如火如荼,成效有目共睹。但是,根据12345热线近期接到的市”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd20210415s/300/w720h380/20210415/aaec-knvsnuf3073914.jpg”,“url”:“http://k.sina.com.cn/article_1893892941_70e2834d02000z095.html”},{“id”:“a1deecc9545794fcc7471f0342017f04”,“ctime”:“2021-04-15 14:31”,“title”:“昆山巴城镇四强化\u201c问诊\u201d垃圾分类”,“description”:“消费日报网讯(记者汪宏胜通讯员陆飞)今年3月,昆山市巴城镇嘉馨花园小区被昆山市垃圾分类办公室列为\u201c灰榜\u201d小区,为进一步提升小区分类秩序,提高居民分类意识”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd20210415ac/40/w480h360/20210415/08c3-knvsnuf3088674.jpg”,“url”:“http://k.sina.com.cn/article_2381872931_8df87f2300100sxzn.html”},{“id”:“edc277a31fb5dbd8b46f2cf56efe0c79”,“ctime”:“2021-04-15 14:47”,“title”:“义乌后宅开展垃圾分类积分兑换活动”,“description”:“为进一步提高《浙江省生活垃圾管理条例》宣传热度,充分调动全民参与垃圾分类的积极性,推进辖区内垃圾分类工作,4月14日下午,义乌后宅街道金城社区开展垃圾分类积分兑”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd2021415s/63/w950h713/20210415/0140-knvsnuf3234457.jpg”,“url”:“http://k.sina.com.cn/article_7505202169_1bf584bf902000ubei.html”},{“id”:“4a90ac4f40a90502547ddc3d15a5908e”,“ctime”:“2021-04-15 15:14”,“title”:“垃圾分类进校园 争当环保小卫士”,“description”:“当日,为培养小朋友的环保意识,进一步普及垃圾分类知识,浙江省杭州市临安区高虹镇新时代文明实践所的党员志愿者,在高虹镇中心幼儿园开展\u201c垃圾分类进校园争当环保小卫”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd20210415s/320/w2048h3072/20210415/7401-knvsnuf3339853.jpg”,“url”:“http://k.sina.com.cn/article_213815211_0cbe8fab020016rcp.html”},{“id”:“f29eed1a0f5c026f15aef324b6404a21”,“ctime”:“2021-04-15 15:18”,“title”:“大数据垃圾分类,提高垃圾分类的精细化”,“description”:“随着经济社会的快速发展和生活水平的不断提高,日常产生的垃圾也越来越多,如果不控制,不断增长的垃圾将超过处理设施的处理能力。\u201c垃圾围城\u201d已经成为摆在我们面前的严重”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd10015/580/w828h552/20210415/e4d1-knvsnuf3264346.jpg”,“url”:“http://t.cj.sina.com.cn/articles/view/6901783348/19b60db3400100xeou”},{“id”:“f854f2235feeff4dc9a22f2ee3b0f09f”,“ctime”:“2021-04-15 15:21”,“title”:“博澳丽苑小区开展\u201c小宝贝 大行动–垃圾分类 从我做起\u201d主题活动”,“description”:“为了让园区小朋友了解垃圾分类的相关知识,增强学生规范投放垃圾的意识,4月14日下午,博澳丽苑小区开展了\u201c小宝贝大行动–垃圾分类从我做起\u201d主题活动。此次活动是”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd20210415ac/40/w480h360/20210415/8226-knvsnuf3291986.jpg”,“url”:“http://k.sina.com.cn/article_6545302907_18621657b00100xfsm.html”},{“id”:“47ae268164053c1b79507e3b1f30b7bf”,“ctime”:“2021-04-15 15:27”,“title”:“石柱首批25名\u201c蓝背心\u201d垃圾分类志愿者上岗”,“description”:“志愿者对厨余垃圾垃圾进行第二次分拣。通讯员隆太良摄  \u201c大爷,您这是可回收物,不能扔到厨余垃圾桶里哟!\u201d\u201c大妈,您好,请让我检查一下袋子里的垃圾分类情况。\u201d”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd2021415s/33/w500h333/20210415/18ef-knvsnuf3416978.jpg”,“url”:“http://k.sina.com.cn/article_1784473157_6a5ce645020026m67.html”},{“id”:“d88998492bb1b5c5882c73b6f1e22e60”,“ctime”:“2021-04-15 16:12”,“title”:“南京青奥社区开展\u201c垃圾分类要做好 美好生活在青奥\u201d主题活动”,“description”:“扬子晚报网4月15日讯(记者徐昇)4月10日,南京建邺区双闸街道青奥社区网格员联合双闸派出所民警、党员志愿者、政法网格员在辖区内三个居民小区开展垃圾分类宣传、”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd20210415s/300/w720h380/20210415/c491-knvsnuf3459691.jpg”,“url”:“http://k.sina.com.cn/article_1653603955_628ffe73020012okc.html”},{“id”:“c0757bfb20c48c87f28d219688633d4b”,“ctime”:“2021-04-15 16:25”,“title”:“进贤县粮食局开展生活垃圾分类培训”,“description”:"  大江网魅力频道讯为进一步增强粮食系统干职工生活垃圾分类意识,助力进贤县全面建成生活垃圾分类体系,实现生活垃圾分类全覆盖。4月13日下午,进贤县粮食局开展生",“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/default/feedbackpics/transform/116/w550h366/20180409/gDCK-fytnfyp1107789.png”,“url”:“http://k.sina.com.cn/article_2341087142_8b8a27a60200105zf.html”},{“id”:“1531d80b321e4fcda4d2ea93f022c743”,“ctime”:“2021-04-15 12:58”,“title”:“公共机构生活垃圾咋分类?烟台市心理康复医院开展专项培训”,“description”:“通讯员 丛冰 孙晓梦 齐鲁晚报·齐鲁壹点记者 孙淑玉为深入推进全市公共机构生活垃圾分类和塑料污染治理工作,积极倡导\u201c垃圾分类就是新时尚\u201d理念,切实增强医院职工”,“source”:“垃圾分类新闻”,“picUrl”:“http://n.sinaimg.cn/sinakd2021415s/399/w720h479/20210415/d25a-knvsnuf2768165.jpg”,“url”:“http://k.sina.com.cn/article_5328858693_13d9fee45020015vf8.html”}]

*/

private int code;

private String msg;

private List newslist;

public int getCode() {

return code;

}

public void setCode(int code) {

this.code = code;

}

public String getMsg() {

return msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public List getNewslist() {

return newslist;

}

public void setNewslist(List newslist) {

this.newslist = newslist;

}

public static class NewslistBean {

/**

  • id : 60bc69482712658255dcef1551721cec

  • ctime : 2021-04-15 14:25

  • title : 小区垃圾成山?垃圾分类,咱可不能松劲儿

  • description : 再过半个月,《北京市生活垃圾管理条例》实施就将迎来一周年。在将近一年的时间里,北京生活垃圾分类进行得如火如荼,成效有目共睹。但是,根据12345热线近期接到的市

  • source : 垃圾分类新闻

  • picUrl : http://n.sinaimg.cn/sinakd20210415s/300/w720h380/20210415/aaec-knvsnuf3073914.jpg

  • url : http://k.sina.com.cn/article_1893892941_70e2834d02000z095.html

*/

private String id;

private String ctime;

private String title;

private String description;

private String source;

private String picUrl;

private String url;

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getCtime() {

return ctime;

}

public void setCtime(String ctime) {

this.ctime = ctime;

}

public String getTitle() {

return title;

}

public void setTitle(String title) {

this.title = title;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

public String getSource() {

return source;

}

public void setSource(String source) {

this.source = source;

}

public String getPicUrl() {

return picUrl;

}

public void setPicUrl(String picUrl) {

this.picUrl = picUrl;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

}

}

数据就有了。

二、垃圾分类新闻接口请求


我希望在主页面设置一个轮播图,对每天的垃圾分类新闻进行一个轮播,那么首先要完成接口的请求。打开ApiService。在里面添加一个接口,如下:

/**

  • 垃圾分类新闻

  • @param num 数量

  • @return TrashNewsResponse 结果实体

*/

@GET(“/lajifenleinews/index?key=” + KEY)

Observable getTrashNews(@Query(“num”) Integer num);

然后修改MainContract类,如下所示:

package com.llw.goodtrash.contract;

import android.annotation.SuppressLint;

import com.llw.goodtrash.api.ApiService;

import com.llw.goodtrash.model.TrashNewsResponse;

import com.llw.goodtrash.model.TrashResponse;

import com.llw.mvplibrary.base.BasePresenter;

import com.llw.mvplibrary.base.BaseView;

import com.llw.mvplibrary.network.NetworkApi;

import com.llw.mvplibrary.network.observer.BaseObserver;

/**

  • 主页面访问网络

  • @author llw

  • @date 2021/3/30 15:28

*/

public class MainContract {

public static class MainPresenter extends BasePresenter {

/**

  • 垃圾分类新闻

  • @param num 数量

*/

@SuppressLint(“CheckResult”)

public void getTrashNews(Integer num) {

ApiService service = NetworkApi.createService(ApiService.class,0);

service.getTrashNews(num).compose(NetworkApi.applySchedulers(new BaseObserver() {

@Override

public void onSuccess(TrashNewsResponse trashNewsResponse) {

if (getView() != null) {

getView().getTrashNewsResponse(trashNewsResponse);

}

}

@Override

public void onFailure(Throwable e) {

if (getView() != null) {

getView().getTrashNewsFailed(e);

}

}

}));

}

}

public interface MainView extends BaseView {

/**

  • 获取垃圾分类新闻返回

  • @param response

*/

void getTrashNewsResponse(TrashNewsResponse response);

/**

  • 搜索物品异常返回

  • @param throwable

*/

void getTrashNewsFailed(Throwable throwable);

}

}

再回到MainActivity页面,继承MvpActivity。

在这里插入图片描述

实现里面的三个方法。

@Override

protected MainContract.MainPresenter createPresenter() {

return new MainContract.MainPresenter();

}

/**

  • 获取垃圾分类新闻成功返回

  • @param response

*/

@Override

public void getTrashNewsResponse(TrashNewsResponse response) {

if (response.getCode() == Constant.SUCCESS_CODE) {

List<TrashNewsResponse.NewslistBean> list = response.getNewslist();

if (list.size() > 0) {

//数据显示

} else {

showMsg(“垃圾分类新闻为空”);

}

} else {

showMsg(response.getMsg());

}

}

/**

  • 获取垃圾分类新闻失败返回

  • @param throwable 异常

*/

@Override

public void getTrashNewsFailed(Throwable throwable) {

Log.d(TAG, “获取垃圾分类新闻失败:” + throwable.toString());

}

然后在initData中调用请求。

@Override

public void initData(Bundle savedInstanceState) {

mPresenter.getTrashNews(10);

}

那么现在页面上的数据请求和返回就都有了,对于这个数据可以设置两个显示的效果,第一个是顶部的轮播,第二个是页面的列表显示。先来完成轮播的显示。

三、轮播显示


这里我们需要用到一个依赖库,打开你的mvplibrary下的build.gradle,在dependencies{}闭包下添加如下代码:

//轮播库

api ‘com.youth.banner:banner:2.1.0’

在这里插入图片描述

然后Sync Now进行同步,同步之后,进入activity_main.xml,修改页面代码如下:

<com.youth.banner.Banner

android:id=“@+id/banner”

android:layout_width=“match_parent”

android:layout_height=“@dimen/dp_200” />

添加位置如下:

在这里插入图片描述

下面回到MainActivity,先完成初始化。

//轮播

private Banner banner;

在initData方法中绑定控件xml。

在这里插入图片描述

banner = findViewById(R.id.banner);

下面写一个显示轮播图的方法

/**

  • 显示轮播图

  • @param list

*/

public void showBanner(List<TrashNewsResponse.NewslistBean> list) {

banner.setAdapter(new BannerImageAdapter<TrashNewsResponse.NewslistBean>(list) {

@Override

public void onBindView(BannerImageHolder holder, TrashNewsResponse.NewslistBean data, int position, int size) {

//显示轮播图片

Glide.with(holder.itemView)

.load(data.getPicUrl())

.apply(RequestOptions.bitmapTransform(new RoundedCorners(30)))

.into(holder.imageView);

}

})

.addBannerLifecycleObserver(this)//添加生命周期观察者

.setIndicator(new CircleIndicator(this));

}

然后在getTrashNewsResponse方法中调用这个显示轮播的方法。

在这里插入图片描述

下面运行一下:

在这里插入图片描述

这样就有轮播了,下面来做这个新闻列表的显示。

四、垃圾分类新闻列表


上面的演示效果图想必你已经看到了,那么你就会觉得这三个按钮很突兀,显然不是很搭,同时为了丰富主页面的内容会需要在主页面中添加垃圾分类的新闻列表,这样的话我们可以重新设计一下activity_main.xml的布局,修改后如下:

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

<androidx.coordinatorlayout.widget.CoordinatorLayout 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:fitsSystemWindows=“true”

tools:context=“.MainActivity”>

<com.google.android.material.appbar.AppBarLayout

android:id=“@+id/appbar_layout”

android:layout_width=“match_parent”

android:layout_height=“@dimen/dp_240”

android:fitsSystemWindows=“true”

android:theme=“@style/ThemeOverlay.AppCompat.Dark.ActionBar”>

<com.google.android.material.appbar.CollapsingToolbarLayout

android:id=“@+id/toolbar_layout”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:fitsSystemWindows=“true”

app:collapsedTitleGravity=“center”

app:contentScrim=“@color/colorPrimaryDark”

app:layout_scrollFlags=“scroll|exitUntilCollapsed”

app:title=“垃圾分类”

app:toolbarId=“@+id/toolbar”>

<com.youth.banner.Banner

android:id=“@+id/banner”

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:fitsSystemWindows=“true”

app:layout_collapseMode=“parallax”

app:layout_collapseParallaxMultiplier=“1” />

<androidx.appcompat.widget.Toolbar

android:id=“@+id/toolbar”

android:layout_width=“match_parent”

android:layout_height=“?attr/actionBarSize”

app:contentInsetStart=“0dp”

app:layout_collapseMode=“pin”

app:layout_scrollFlags=“scroll|snap”

app:popupTheme=“@style/ThemeOverlay.AppCompat.Light” />

</com.google.android.material.appbar.CollapsingToolbarLayout>

</com.google.android.material.appbar.AppBarLayout>

<androidx.core.widget.NestedScrollView

android:layout_width=“match_parent”

android:layout_height=“match_parent”

android:fillViewport=“true”

android:orientation=“vertical”

android:overScrollMode=“never”

app:layout_behavior=“@string/appbar_scrolling_view_behavior”>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:orientation=“vertical”>

<LinearLayout

android:layout_width=“match_parent”

android:layout_height=“@dimen/dp_72”

android:background=“@color/white”

android:gravity=“center”

android:orientation=“horizontal”>

<com.google.android.material.button.MaterialButton

style=“@style/Widget.MaterialComponents.Button.UnelevatedButton”

android:layout_width=“wrap_content”

android:layout_height=“@dimen/dp_50”

android:gravity=“center”

android:insetTop=“@dimen/dp_0”

android:insetBottom=“@dimen/dp_0”

android:onClick=“jumpTextInput”

android:text=“文字”

android:textSize=“@dimen/sp_16”

android:theme=“@style/Theme.MaterialComponents.Light.DarkActionBar”

app:backgroundTint=“@color/colorPrimaryDark”

app:cornerRadius=“@dimen/dp_12”

app:icon=“@mipmap/icon_text_input”

app:iconGravity=“textStart”

app:iconSize=“@dimen/dp_24” />

<com.google.android.material.button.MaterialButton

style=“@style/Widget.MaterialComponents.Button.UnelevatedButton”

android:layout_width=“wrap_content”

android:layout_height=“@dimen/dp_50”

android:layout_marginStart=“@dimen/dp_16”

android:layout_marginEnd=“@dimen/dp_16”

android:gravity=“center”

android:insetTop=“@dimen/dp_0”

android:insetBottom=“@dimen/dp_0”

android:onClick=“jumpVoiceInput”

android:text=“语音”

android:textSize=“@dimen/sp_16”

android:theme=“@style/Theme.MaterialComponents.Light.DarkActionBar”

app:backgroundTint=“@color/colorPrimaryDark”

app:cornerRadius=“@dimen/dp_12”

app:icon=“@mipmap/icon_voice_input”

app:iconGravity=“textStart”

app:iconSize=“@dimen/dp_24” />

<com.google.android.material.button.MaterialButton

style=“@style/Widget.MaterialComponents.Button.UnelevatedButton”

android:layout_width=“wrap_content”

android:layout_height=“@dimen/dp_50”

android:gravity=“center”

android:insetTop=“@dimen/dp_0”

android:insetBottom=“@dimen/dp_0”

android:onClick=“jumpImageInput”

android:text=“图像”

android:textSize=“@dimen/sp_16”

android:theme=“@style/Theme.MaterialComponents.Light.DarkActionBar”

app:backgroundTint=“@color/colorPrimaryDark”

app:cornerRadius=“@dimen/dp_12”

app:icon=“@mipmap/icon_image_input”

app:iconGravity=“textStart”

app:iconSize=“@dimen/dp_24” />

<androidx.recyclerview.widget.RecyclerView

android:id=“@+id/rv_news”

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_marginTop=“@dimen/dp_2” />

</androidx.core.widget.NestedScrollView>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

下面先增加一个样式,打开app模块的res → values → styles.xml。在里面添加一个样式

添加位置如下:

在这里插入图片描述

然后打开AndroidManifest.xml,将这个样式设置给MainActivity。

在这里插入图片描述

下面关于主页面的代码还不着急写,首先要完成这个列表数据的显示,这里还是会有item的布局和适配器,首先创建item的布局,在layout下新建一个item_trash_new_rv.xml。里面的代码如下:

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

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

android:layout_width=“match_parent”

android:layout_height=“wrap_content”

android:layout_marginBottom=“@dimen/dp_1”

android:id=“@+id/item_trash_news”

android:foreground=“?attr/selectableItemBackground”

android:background=“@color/white”

android:orientation=“vertical”

android:padding=“@dimen/dp_16”>

<TextView

android:id=“@+id/tv_title”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:ellipsize=“end”

android:singleLine=“true”

android:text=“标题”

android:textColor=“@color/black”

android:textSize=“@dimen/sp_16”

android:textStyle=“bold” />

<TextView

android:id=“@+id/tv_description”

android:layout_width=“wrap_content”

android:layout_height=“wrap_content”

android:layout_below=“@+id/tv_title”

android:layout_marginTop=“@dimen/dp_8”

android:text=“内容描述”

android:textColor=“@color/black”

android:textSize=“@dimen/sp_14” />

现在对于这个item的内容就只有标题和内容,可以酌情增加时间或者图标什么的。

然后就是适配器,在adapter下新建一个TrashNewsAdapter类,里面的代码如下:

package com.llw.goodtrash.adapter;

import androidx.annotation.Nullable;

import com.chad.library.adapter.base.BaseQuickAdapter;

import com.chad.library.adapter.base.BaseViewHolder;

import com.llw.goodtrash.R;

import com.llw.goodtrash.model.TrashNewsResponse;

import java.util.List;

/**

  • 垃圾分类新闻列表适配器

  • @author llw

  • @date 2021/4/16 10:36

*/

public class TrashNewsAdapter extends BaseQuickAdapter<TrashNewsResponse.NewslistBean, BaseViewHolder> {

public TrashNewsAdapter(int layoutResId, @Nullable List<TrashNewsResponse.NewslistBean> data) {

super(layoutResId, data);

}

@Override

protected void convert(BaseViewHolder helper, TrashNewsResponse.NewslistBean item) {

helper.setText(R.id.tv_title, item.getTitle())

.setText(R.id.tv_description, item.getDescription())

.addOnClickListener(R.id.item_trash_news);

}

}

下面可以到MainActivity中去写代码了,首先是变量的声明。

private RecyclerView rvNews;

private List<TrashNewsResponse.NewslistBean> mList = new ArrayList<>();

private TrashNewsAdapter mAdapter;

private CollapsingToolbarLayout collapsingToolbarLayout;

private AppBarLayout appBarLayout;

然后新建一个initView方法,将之前在initData中的代码也移到这个方法里面。方法代码如下:

/**

  • 页面初始化

*/

private void initView() {

banner = findViewById(R.id.banner);

collapsingToolbarLayout = findViewById(R.id.toolbar_layout);

appBarLayout = findViewById(R.id.appbar_layout);

rvNews = findViewById(R.id.rv_news);

//伸缩偏移量监听

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {

boolean isShow = true;

int scrollRange = -1;

@Override

public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {

if (scrollRange == -1) {

scrollRange = appBarLayout.getTotalScrollRange();

}

if (scrollRange + verticalOffset == 0) {//收缩时

collapsingToolbarLayout.setTitle(“垃圾分类”);

isShow = true;

} else if (isShow) {//展开时

collapsingToolbarLayout.setTitle(“”);

isShow = false;

}

}

});

//设置列表

mAdapter = new TrashNewsAdapter(R.layout.item_trash_new_rv, mList);

mAdapter.setOnItemChildClickListener((adapter, view, position) -> {

showMsg(“点击了第” + position + “个”);

});

rvNews.setLayoutManager(new LinearLayoutManager(context));

rvNews.setAdapter(mAdapter);

//请求垃圾分类新闻数据

mPresenter.getTrashNews(10);

}

然后直接在initData中调用initView就可以。

@Override

public void initData(Bundle savedInstanceState) {

//页面初始化

initView();

}

然后再写一个显示列表数据的方法

/**

  • 显示新闻列表

  • @param list

*/

private void showList(List<TrashNewsResponse.NewslistBean> list) {

mList.clear();

mList.addAll(list);

mAdapter.notifyDataSetChanged();

}

然后在getTrashNewsResponse中调用。

更多Android高级工程师进阶学习资料

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

} else if (isShow) {//展开时

collapsingToolbarLayout.setTitle(“”);

isShow = false;

}

}

});

//设置列表

mAdapter = new TrashNewsAdapter(R.layout.item_trash_new_rv, mList);

mAdapter.setOnItemChildClickListener((adapter, view, position) -> {

showMsg(“点击了第” + position + “个”);

});

rvNews.setLayoutManager(new LinearLayoutManager(context));

rvNews.setAdapter(mAdapter);

//请求垃圾分类新闻数据

mPresenter.getTrashNews(10);

}

然后直接在initData中调用initView就可以。

@Override

public void initData(Bundle savedInstanceState) {

//页面初始化

initView();

}

然后再写一个显示列表数据的方法

/**

  • 显示新闻列表

  • @param list

*/

private void showList(List<TrashNewsResponse.NewslistBean> list) {

mList.clear();

mList.addAll(list);

mAdapter.notifyDataSetChanged();

}

然后在getTrashNewsResponse中调用。

更多Android高级工程师进阶学习资料

进阶学习视频
[外链图片转存中…(img-LsF2l8fv-1714679307594)]

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中…(img-YXooY1xX-1714679307595)]

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 30
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值