Android 天气APP(三十二)快捷切换常用城市

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 知识点汇总…

由于篇幅有限,就不做过多的介绍,大家请自行脑补

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值