private boolean isChangeCity = false;//是否可以展开,如果没有添加常用城市,自然不能展开
既然有列表自然就有适配器。然后在layout中创建一个item_main_city_change.xml
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android=“http://schemas.android.com/apk/res/android”
android:id=“@+id/tv_city”
android:layout_width=“wrap_content”
android:layout_height=“wrap_content”
android:background=“@drawable/selected_bg_color”
android:paddingStart=“@dimen/dp_16”
android:paddingTop=“@dimen/dp_4”
android:paddingEnd=“@dimen/dp_16”
android:paddingBottom=“@dimen/dp_4”
android:text=“常用城市”
android:textColor=“@drawable/selected_text_color”
android:textSize=“@dimen/sp_18” />
这里我改变了触摸item时的背景样式和文字颜色样式,样式都放在drawable下。
selected_bg_color.xml
<?xml version="1.0" encoding="utf-8"?>selected_bg_radius.xml
<?xml version="1.0" encoding="utf-8"?>selected_text_color.xml
<?xml version="1.0" encoding="utf-8"?>item写完了,下面到适配器了。
在adapter包下新建一个MainChangeCommonlyCityAdapter类,代码如下:
package com.llw.goodweather.adapter;
import androidx.annotation.Nullable;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.BaseViewHolder;
import com.llw.goodweather.R;
import com.llw.mvplibrary.bean.ResidentCity;
import java.util.List;
/**
-
主页面左右滑动切换常用城市列表适配器
-
@author llw
*/
public class MainChangeCommonlyCityAdapter extends BaseQuickAdapter<ResidentCity, BaseViewHolder> {
public MainChangeCommonlyCityAdapter(int layoutResId, @Nullable List data) {
super(layoutResId, data);
}
@Override
protected void convert(BaseViewHolder helper, ResidentCity item) {
helper.setText(R.id.tv_city, item.getLocation())
.addOnClickListener(R.id.tv_city);
}
}
刚才适配器写好了,然后进入到MainActivity中,再创建两个变量
//主页面切换城市列表适配器
private MainChangeCommonlyCityAdapter changeCityAdapter;
//常用城市切换列表
private List residentCityList = new ArrayList<>();
一个适配器一个数据列表,然后下面新增一个方法用于加载适配器数据并且渲染,还有点击事件。这里先查询数据,然后判断数据,之后渲染数据,最后是点击item之后搜索城市,然后查找天气数据。
/**
- 加载常用城市数据
*/
private void loadingCommonlyUsedCity() {
residentCityList = LitePal.findAll(ResidentCity.class);
//先判断是否有常用城市
if (residentCityList != null && residentCityList.size() > 0) {
isChangeCity = true;
} else {
isChangeCity = false;
}
//配置适配器
changeCityAdapter = new MainChangeCommonlyCityAdapter(R.layout.item_main_city_change, residentCityList);
LinearLayoutManager manager = new LinearLayoutManager(context);
manager.setOrientation(RecyclerView.HORIZONTAL);
rvChangeCity.setLayoutManager(manager);
rvChangeCity.setAdapter(changeCityAdapter);
//常用城市点击
changeCityAdapter.setOnItemChildClickListener((adapter, view, position) -> {
showLoadingDialog();
district = residentCityList.get(position).getLocation();
mPresent.newSearchCity(district);
flag = false;
//隐藏列表
rvChangeCity.setVisibility(View.GONE);
changeCityState = false;
});
}
这里我判断了一下是否为定位城市的返回,是的话我就添加到数据库中,当然也不能重复添加数据,因此还需要判断一下。
/**
-
添加到常用城市列表
-
@param locationBean
*/
private void addCommonlyUsedCity(NewSearchCityResponse.LocationBean locationBean) {
if (flag) {//定位到的城市
List residentCityList = LitePal.findAll(ResidentCity.class);
if (residentCityList != null && residentCityList.size() > 0) {
//查询要添加的城市是否已经存在
List residentCities = LitePal
.where(“location = ? and parent_city = ?”, locationBean.getName(), locationBean.getAdm2())
.find(ResidentCity.class);
if (residentCities.size() == 0) {
ResidentCity residentCity = new ResidentCity();
residentCity.setLocation(locationBean.getName());//地区/城市名称
residentCity.setParent_city(locationBean.getAdm2());//该地区/城市的上级城市
residentCity.setAdmin_area(locationBean.getAdm1());//该地区/城市所属行政区域
residentCity.setCnty(locationBean.getCountry());//该地区/城市所属国家名称
residentCity.save();//保存数据到数据库中
}
最后附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)
面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,下面这份PDF是我翻阅了差不多1个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点, 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。
这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…
由于篇幅有限,就不做过多的介绍,大家请自行脑补
个月左右一些Android大博主的博客从他们那里取其精华去其糟泊所整理出来的一些Android的核心知识点,** 全部都是精华中的精华,我能面试到现在资深开发人员跟我整理的这本Android核心知识点有密不可分的关系,在这里本着共赢的心态分享给各位朋友。
[外链图片转存中…(img-w3n6Hp2r-1719208440891)]
这份PDF囊括了JVM,Java集合,Java多线程并发,Java基础,生命周期,微服务, 进程,Parcelable 接口,IPC,屏幕适配,线程异步,ART,架构,Jetpack,NDK开发,计算机网络基础,类加载器,Android 开源库源码分析,设计模式汇总,Gradle 知识点汇总…
由于篇幅有限,就不做过多的介绍,大家请自行脑补