Android_实现省市区(县)三级联动效果

Android 省市县 三级联动(android-wheel的使用) 算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。部分资料展示:有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。 阅读详情

在开篇之前,首先,这篇博客只为分享记录自己的学习过程,这里要感谢技术分享的博主,大家可以查看原博客地址:点击打开链接

言回正传,前些日子,女友在面试的过程中,面试官问:如何实现省市区三级联动效果?这里记录下相关实现效果的学习过程,先上效果图:


准备步骤1、:android-wheel控件

如图看出,实现的效果类似于Android中android.widget.DatePicker和android.widget.TimePicker,但在Android中没办法用系统中的widget,因为Google没有提供widget的对外数据源适配接口,因此,我们就需要自己来自定义view来实现。其实也不用担心,在Github上有一个开源控件,叫android-wheel,项目地址:https://github.com/maarek/android-wheel,该组件对数据适配接口的抽取和事件的回调做了抽取,下载放入到自己的项目src目录下:如图 kankan.wheel.widget目录(这里对界面的代码做了改动)


准备步骤2:解析省市区(县)的XML文件

省市区(县)及邮编的数据,放在项目中的assets目录下:province_data.xml文件,因此需要对XML文件的进行解析,获取数据。(有关于XML文件的解析教程,请找度娘大笑)

这里采用的是SAX解析方式,XML文件数据解析工具类代码如下:

package com.ctlive.framepackage.service;

import com.ctlive.framepackage.bean.model.CityModel;
import com.ctlive.framepackage.bean.model.DistrictModel;
import com.ctlive.framepackage.bean.model.ProvinceModel;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.List;

/**
 * 解析XML文件业务处理类——采用方式是SAX解析方式(SAX解析占用内存少,并且速度快)
 * 	注:XML文件解析方式三种:1、SAX解析;2、PULL解析;3、DOM解析
 */
public class XmlParserHandler extends DefaultHandler {

	/**
	 * 存储所有的解析对象
	 */
	private List<ProvinceModel> provinceList = new ArrayList<ProvinceModel>();

	public XmlParserHandler() {

	}

	//提供方法返回存储所有解析对象的集合
	public List<ProvinceModel> getDataList() {
		return provinceList;
	}

	@Override
	public void startDocument() throws SAXException {
		// 当读到第一个开始标签的时候,会触发这个方法
	}

	//创建解析实体类对象
	ProvinceModel provinceModel;
	CityModel cityModel;
	DistrictModel districtModel;

	@Override
	public void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {
		// 当遇到开始标记的时候,调用这个方法
		if (qName.equals("province")) {
			provinceModel = new ProvinceModel();
			provinceModel.setName(attributes.getValue(0));
			provinceModel.setCityList(new ArrayList<CityModel>());
		} else if (qName.equals("city")) {
			cityModel = new CityModel();
			cityModel.setName(attributes.getValue(0));
			cityModel.setDistrictList(new ArrayList<DistrictModel>());
		} else if (qName.equals("district")) {
			districtModel = new DistrictModel();
			districtModel.setName(attributes.getValue(0));
			districtModel.setZipcode(attributes.getValue(1));
		}
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		// 遇到结束标记的时候,会调用这个方法
		if (qName.equals("district")) {
			cityModel.getDistrictList().add(districtModel);
		} else if (qName.equals("city")) {
			provinceModel.getCityList().add(cityModel);
		} else if (qName.equals("province")) {
			provinceList.add(provinceModel);
		}
	}

	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
	}

}

准备步骤3:获取省市区(县)的数据源(数据存入到HashMap)

通过XmlParserHandler.java提供的getDateList()方法,获取省市区(县)的数据,然后拆分存放到各自的HashMap集合(准备数据源,进行数据适配),这里获取数据源自定义AddressBaseActivity类中实现,方便Activity继承该类,获取数据源,代码如下:

package com.ctlive.framepackage.base;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import android.app.Activity;
import android.content.res.AssetManager;

import com.ctlive.framepackage.bean.model.CityModel;
import com.ctlive.framepackage.bean.model.DistrictModel;
import com.ctlive.framepackage.bean.model.ProvinceModel;
import com.ctlive.framepackage.service.XmlParserHandler;

/**
 * 初始化省市区的数据源
 *	   解析省市区的Xml数据,并进行拆分储存到省、市、区的HashMap集合中业务处理类
 */
public class AddressBaseActivity extends Activity {

	/**
	 * 存储所有省的数组
	 */
	protected String[] mProvinceDatas;
	/**
	 * key - 省 value - 市
	 */
	protected Map<String, String[]> mCitisDatasMap = new HashMap<String, String[]>();
	/**
	 * key - 市 values - 区
	 */
	protected Map<String, String[]> mDistrictDatasMap = new HashMap<String, String[]>();

	/**
	 * key - 区 values - 邮编
	 */
	protected Map<String, String> mZipcodeDatasMap = new HashMap<String, String>();

	/**
	 * 当前省的名称
	 */
	protected String mCurrentProviceName;
	/**
	 * 当前市的名称
	 */
	protected String mCurrentCityName;
	/**
	 * 当前区的名称
	 */
	protected String mCurrentDistrictName ="";

	/**
	 * 当前区的邮政编码
	 */
	protected String mCurrentZipCode ="";

	/**
	 * 解析省市区的XML数据
	 */

	protected void initProvinceDatas()
	{
		List<ProvinceModel> provinceList = null;
		AssetManager asset = getAssets();
		try {
			InputStream input = asset.open("province_data.xml");
			// 创建一个解析xml的工厂对象
			SAXParserFactory spf = SAXParserFactory.newInstance();
			// 解析xml
			SAXParser parser = spf.newSAXParser();
			XmlParserHandler handler = new XmlParserHandler();
			parser.parse(input, handler);
			input.close();
			// 获取解析出来的数据
			provinceList = handler.getDataList();
			// 初始化默认选中的省、市、区
			if (provinceList!= null && !provinceList.isEmpty()) {
				mCurrentProviceName = provinceList.get(0).getName();	//省
				List<CityModel> cityList = provinceList.get(0).getCityList();
				if (cityList!= null && !cityList.isEmpty()) {
					mCurrentCityName = cityList.get(0).getName();	//市
					List<DistrictModel> districtList = cityList.get(0).getDistrictList();
					mCurrentDistrictName = districtList.get(0).getName();	//区
					mCurrentZipCode = districtList.get(0).getZipcode();	//邮编
				}
			}
			//进行拆分储存到省、市、区的HashMap集合
			mProvinceDatas = new String[provinceList.size()];	//初始化所有省的数组
			for (int i=0; i< provinceList.size(); i++) {
				// 遍历所有省的数据,并存入到数组
				mProvinceDatas[i] = provinceList.get(i).getName();
				List<CityModel> cityList = provinceList.get(i).getCityList();
				String[] cityNames = new String[cityList.size()];	//初始化省下面的所有市的数组
				for (int j=0; j< cityList.size(); j++) {
					// 遍历省下面的所有市的数据,并存入到的数组
					cityNames[j] = cityList.get(j).getName();
					List<DistrictModel> districtList = cityList.get(j).getDistrictList();
					String[] distrinctNameArray = new String[districtList.size()];	//初始化市下面的所有区/县的数组
					DistrictModel[] distrinctArray = new DistrictModel[districtList.size()];
					for (int k=0; k<districtList.size(); k++) {
						// 遍历市下面所有区/县的数据
						DistrictModel districtModel = new DistrictModel(districtList.get(k).getName(), districtList.get(k).getZipcode());
						// 区/县对于的邮编,保存到mZipcodeDatasMap
						mZipcodeDatasMap.put(districtList.get(k).getName(), districtList.get(k).getZipcode());
						distrinctArray[k] = districtModel;
						distrinctNameArray[k] = districtModel.getName();
					}
					// 市-区/县的数据,保存到mDistrictDatasMap
					mDistrictDatasMap.put(cityNames[j], distrinctNameArray);
				}
				// 省-市的数据,保存到mCitisDatasMap
				mCitisDatasMap.put(provinceList.get(i).getName(), cityNames);
			}
		} catch (Throwable e) {
			e.printStackTrace();
		} finally {

		}
	}
}

实现步骤1:xml布局文件,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="20dp"
    android:background="#E9E9E9">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:background="#1ca0aa"
        android:paddingTop="5dip" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="20dip"
            android:text="请选择省市区"
            android:textColor="#FFF"
            android:textSize="20sp" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dip"
        android:orientation="horizontal" >

        <kankan.wheel.widget.WheelView
            android:id="@+id/id_province"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" >
        </kankan.wheel.widget.WheelView>

        <kankan.wheel.widget.WheelView
            android:id="@+id/id_city"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" >
        </kankan.wheel.widget.WheelView>

        <kankan.wheel.widget.WheelView
            android:id="@+id/id_district"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1" >
        </kankan.wheel.widget.WheelView>
    </LinearLayout>

    <Button
        android:id="@+id/btn_confirm"
        android:layout_marginTop="10dip"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="确 定"
        android:textColor="#FFF"
        android:background="#1ca0aa"/>

</LinearLayout>

实现步骤2:java类实现过程代码如下:


package com.ctlive.framepackage;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.ctlive.framepackage.base.AddressBaseActivity;
import kankan.wheel.widget.OnWheelChangedListener;
import kankan.wheel.widget.WheelView;
import kankan.wheel.widget.adapters.ArrayWheelAdapter;


/**
 * Created by CTlive on 2016/7/25.
 */
public class SetAddressWheelActivity extends AddressBaseActivity implements View.OnClickListener,OnWheelChangedListener {
    private WheelView mViewProvince;    // 省
    private WheelView mViewCity;    // 市
    private WheelView mViewDistrict;    // 区/县
    private Button mBtnConfirm; //确定按钮

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_set_address_wheel);
        setUpViews();
        setUpListener();
        setUpData();
    }

    private void setUpViews() {
        mViewProvince = (WheelView) findViewById(R.id.id_province);
        mViewCity = (WheelView) findViewById(R.id.id_city);
        mViewDistrict = (WheelView) findViewById(R.id.id_district);
        mBtnConfirm = (Button) findViewById(R.id.btn_confirm);
    }

    private void setUpListener() {
        // 添加change事件
        mViewProvince.addChangingListener(SetAddressWheelActivity.this);
        // 添加change事件
        mViewCity.addChangingListener(SetAddressWheelActivity.this);
        // 添加change事件
        mViewDistrict.addChangingListener(SetAddressWheelActivity.this);
        // 添加onclick事件
        mBtnConfirm.setOnClickListener(SetAddressWheelActivity.this);
    }

    //在wheel组件中进行数据显示的配置和数据显示数量的配置,在这里设置一行可见显示7条数据
    private void setUpData() {
        initProvinceDatas();
        mViewProvince.setViewAdapter(new ArrayWheelAdapter<String>(SetAddressWheelActivity.this, mProvinceDatas));
        // 设置可见条目数量
        mViewProvince.setVisibleItems(7);
        mViewCity.setVisibleItems(7);
        mViewDistrict.setVisibleItems(7);
        updateCities();
        updateAreas();
    }

    /**
     * 该回调方法中,对于省、市、区/县的滑动,分别做数据的适配
     * @param wheel the wheel view whose state has changed
     * @param oldValue the old value of current item
     * @param newValue the new value of current item
     *
     * 在onChanged方法中加上代码:
     *                 mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[0];
     *                 mCurrentZipCode = mZipcodeDatasMap.get(mCurrentDistrictName);
     *      解决如果不滑动区,只滑动省或市的话,返回选中的区(邮政编码)始终就是上次选择的区(邮政编码)的问题
     */
    @Override
    public void onChanged(WheelView wheel, int oldValue, int newValue) {
        // TODO Auto-generated method stub
        mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[0];  //未滑动选择时,区默认为第一项区的数据
        mCurrentZipCode = mZipcodeDatasMap.get(mCurrentDistrictName);   //区未滑动选择时,邮编默认为第一项区的数据的邮编
        if (wheel == mViewProvince) {
            updateCities();
            mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[0];
            mCurrentZipCode = mZipcodeDatasMap.get(mCurrentDistrictName);
        } else if (wheel == mViewCity) {
            updateAreas();
            mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[0];
            mCurrentZipCode = mZipcodeDatasMap.get(mCurrentDistrictName);
        } else if (wheel == mViewDistrict) {
            mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[newValue];
            mCurrentZipCode = mZipcodeDatasMap.get(mCurrentDistrictName);
        }
    }

    /**
     * 根据当前的市,更新区WheelView的信息
     */
    private void updateAreas() {
        int pCurrent = mViewCity.getCurrentItem();
        mCurrentCityName = mCitisDatasMap.get(mCurrentProviceName)[pCurrent];
        String[] areas = mDistrictDatasMap.get(mCurrentCityName);

        if (areas == null) {
            areas = new String[] { "" };
        }
        mViewDistrict.setViewAdapter(new ArrayWheelAdapter<String>(this, areas));
        mViewDistrict.setCurrentItem(0);
    }

    /**
     * 根据当前的省,更新市WheelView的信息
     */
    private void updateCities() {
        int pCurrent = mViewProvince.getCurrentItem();
        mCurrentProviceName = mProvinceDatas[pCurrent];
        String[] cities = mCitisDatasMap.get(mCurrentProviceName);
        if (cities == null) {
            cities = new String[] { "" };
        }
        mViewCity.setViewAdapter(new ArrayWheelAdapter<String>(this, cities));
        mViewCity.setCurrentItem(0);
        updateAreas();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_confirm:
                showSelectedResult();
                break;
            default:
                break;
        }
    }

    private void showSelectedResult() {
        Toast.makeText(SetAddressWheelActivity.this, "当前选中:" + mCurrentProviceName + "," + mCurrentCityName + ","
                + mCurrentDistrictName + "," + mCurrentZipCode, Toast.LENGTH_SHORT).show();
    }
}

补充:

一、监听wheel组件的滑动、点击、选中事件,通过实现组件的三个事件监听接口实现,分别是:

1、OnWheelScrollListener 滑动事件;

2、OnWheelChangedListener 选中项的position变化事件

3、OnWheelClickedListener 条目点击事件

要知道哪个省、市、区被选中了,实现第二个接口就行,在方法回调时去作同步和更新数据,比如省级条目滑动的时候,市级和县级数据都要做对应的适配、市级滑动时需要去改变县级(区)的数据,这样才能实现级联的效果,至于如何改变,需要三个HashMap来分别保存他们的对应关系:

二、设置wheel组件中字体颜色、字体大小等信息,在如图的ArraywheelAdapter适配器中进行:


代码如下:

/*
 *  Copyright 2011 Yuri Kanivets
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package kankan.wheel.widget.adapters;

import android.content.Context;
import android.graphics.Color;

/**
 * The simple Array wheel adapter
 * @param <T> the element type
 */
public class ArrayWheelAdapter<T> extends AbstractWheelTextAdapter {
    
    // items
    private T items[];

    /**
     * Constructor
     * @param context the current context
     * @param items the items
     */
    public ArrayWheelAdapter(Context context, T items[]) {
        super(context);
        setTextColor(Color.BLACK);   //设置字体颜色
//        setTextSize(20);    //设置字体大小
//        setEmptyItemResource(TEXT_VIEW_ITEM_RESOURCE);  //设置空的item资源
        this.items = items;
    }
    
    @Override
    public CharSequence getItemText(int index) {
        if (index >= 0 && index < items.length) {
            T item = items[index];
            if (item instanceof CharSequence) {
                return (CharSequence) item;
            }
            return item.toString();
        }
        return null;
    }

    @Override
    public int getItemsCount() {
        return items.length;
    }
}


最终代码实现效果如下图:



Android实现省市区三级联动 最近做项目时,有个需求是在用户填写的个人资料中有个选择省市区的三级联动效果,通过一番查找,在github上找到一个不错的控件:PickerView。 github项目地址为:https://github.com/Bigkoo/Android-PickerView 控件使用起来非常简单,先上效果图: 使用PickerView前首先要添加依赖: compile 'com.contrary... 阅读详情

相关推荐

Android省市区三级联动

Android自定义控件实现省市区三级联动,能够动态更改数据实现联动,直接拷贝就能使用

梦想起于用户使用量 1595

Android实现省市区三级联动效果

最近在做项目时有一个选择省市区的三级联动效果。百度上搜了好久也没找到一个合适的控件。后来再github上找到一个不错的三级联动控件,拿来用发现效果还挺好。把自己写的一个demo分享一下。 控件名称为PickerView,实现了 iOS 的 PickerView 的效果,并且有时间选择和选项选择还支持一二三级联动效果。 项目地址:https://github.com/saiwu-bigkoo/An...

smily的博客 3万+

Android 省市区三级联动(真实数据)

Android 省市区三级联动(真实数据) 仿IOS滚轮效果

android 省市区三级联动

最近项目,需要用到三级联动,在网上找了一些例子,进行了修改,实现,提炼出来了给大家分享 实现思路是在三个wheelview 进行联动。选择了省,马上就关联到市和区,选择了市 ,马上就可以关联到区。效果图:首先建了三个Model 用于存数据 存省 和市的list 和区的public class ProvinceInfoModel { private String name; pri

方志朋的专栏 1万+

安卓 省市区县选择 组件

安卓 android studio 省市区县选择 组件,完整工程,修改一下就可以使用。 compileSdkVersion 26 buildToolsVersion "26.0.2"

Android中使用开源框架Citypickerview实现省市区三级联动选择

1.概述 记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯一麻烦的是需要自己整理并解析省市区的xml文件,思路很简单,但是代码量相对大了些。偶然期间发现了另外一个开源组件,也就是今天要介绍的citypickerview。 github地址:crazyandcoder/citypicker 2. 实现效果 下面给大家演示下实现效果: 3.   实现方法 (1)添加依赖 dependencies { ... compile 'liji.library.dev:citypick

android:省市县三级联动(基于json和spring)

一、请看效果图“: 二、程序的代码: 1、MainActivity.java package com.loveplusplus.loader.demo.ui; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import androi...

weixin_34112030的博客 210

Android省市区三级联动控件使用方法实例讲解

最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化。为了方便以后使用,抽离出来放在了github上WheelView。同时把其核心库放在了JCenter中了,可以直接引用。也可以参考项目中的Demo进行引用   下面介绍一下如何使用   如果用的是AndroidStudio那么直接在build.gradle文件中添加依赖: dependencies { compile 'chuck.WheelItemView:library:1.0.1' }   成功引入库之后,可以在需要弹出省市区选择框的页面生成一AddressPickerView 实例。    p

Android 省市县 三级联动(android-wheel的使用)

Android 省市县 三级联动(android-wheel的使用)

Hongyang 7万+

Android省市区三级联动json

Android省市区三级联动json

学习笔记——神经科学的数学基础

m%3D2X_%7Bi%7DiNy%3DAxW%3DABx_%7Bj%7Dy_%7Bi%7Dy%3DWxt=N7T8卷积神经网络(CNN)详细介绍及其原理详解_IronmanJay的博客-优快云博客https://blog.youkuaiyun.com/IronmanJay/article/details/128689946?

zxyopenstar的博客 1374

Android省市区三级联动滚轮选择(真实项目中提取出来的组件)

最近项目要做一个,类似淘宝手机客户端的,选择收货地址的三级联动滚动选择组件,下面是它的大致界面截图: 在IOS中有个叫UIPickerView的选择器,并且在dataSource中定义了UIPickerView的数据源和定制内容,所以用只要熟悉它的基本用法,要实现这么个三级联动滑动选择是挺简单的。  言归正传,今天讨论的是在Android里面如何来实现这么个效果,那么如何实现呢

WILLIAM-HUAN 个人技术博客 12万+

【搭建实战】全国天气预报看板搭建

不仅如此,码匠还一站式提供了企业内部系统常用的租户管理、细粒度的权限控制、审计日志等功能,让您快速搭建后台应用的同时,也为您的企业信息安全保驾护航。是一款国内研发的开发者友好的低代码平台,您无需了解React/Vue等框架的开发、部署等各种细节,就可以快速打通前后端,连接RESTAPI、MySQL、MongoDB等多种数据源,然后通过一套开箱即用的组件,轻松搭建功能完善的数据看板、数据洞察、Admin管理后台等多种应用。天气预报对我们的各项活动有很大的帮助,可以让我们合理安排自己的出行等活动。...

weixin_39545889的博客 428

最新Android简单实现省市区三级联动

这是本人第一次写博客,也是本人的第一篇博客 有什么不足之处,希望大家多多见谅、互相请教! 省市级三级联动相信大家已经很熟悉了,网购的时候选地址就要用到这个功能 我在网上看了很多篇关于Android省市区三级联动的文章 感觉都说得不是很好,所以就打算自己写一篇,希望可以帮助到大家学习 废话不多说,进入正题 首先我用到的是 ...

Damonnnn的博客 3150

Claude Code长期记忆:优雅的上下文管理

ClaudeCode的上下文管理系统采用三层架构设计,通过智能压缩和优化策略在记忆容量与性能间取得平衡。系统包含短期记忆(高速工作区)、中期记忆(智能蒸馏器)和长期记忆(持久化知识库)。当Token使用率达到92%阈值时启动wU2压缩器,采用8段式结构化摘要保留关键信息,并配合智能文件恢复和渐进式预警机制。该系统通过分层处理、优雅降级和透明化交互,为AI应用提供了高效可靠的上下文管理方案,展现了在有限资源下实现智能记忆的艺术。

m0_53117338的博客 3817

DCDC系列(一): COT DCDC基本原理

电流环DCDC属于双环控制模式,根据电流检测的位置,分为峰值电流环控制模式、谷值电流环控制模式和平均电流环控制模式,主要由输出电压反馈环和电流环两个环路来实现控制,其瞬态响应比电压环更好,且有自动限流的功能,但仍需要斜坡补偿网络,且对噪声敏感。Stage3: 在下管NMOS打开阶段,由于后级负载此时间段内消耗的电量较少,所以VFB还未低至Vref,所以此阶段中,上管PMOS和下管NMOS均处于关断状态,此时的电感电流为0mA,此阶段测的VSW上的电压就是Cout上的电压VREG;

weixin_40073649的博客 3943

Android实现省市县三级联动效果(附带源码)

Android实现省市县三级联动效果(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1289

YOLO11优化:原创自研 | 低对比度场景 | 平滑的 CIoU,对其惩罚项(中心点距离和长宽比差异)进行平滑

为了应对上述挑战,我们需要一个对边界框定位误差更具容忍度的 IoU 变体。我们的核心思想是:在 CIoU 的基础上,对其惩罚项(中心点距离和长宽比差异)进行平滑处理

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 535

android实现省市区三级联动 citypicker 亲测好用

前言 项目新增新功能地区筛选 要实现省市区三级联动 一直以为很简单结果在使用第三方组件的时候出现了问题 Github上stars数最多的那个Android-PickerView一直出现问题 不是报空指针就是数组越界一个小问题卡了一下午 加技术群都满了 问题区也没有找到满意的答案 一度怀疑这个Android-PickerView这个星星是不是刷上去的最后无奈还是换了别的第三方 在Github上找到了这个citypicker亲测很好用 流程也非常简单 ! CityPicker 城市选择器 功能点 支持仿iOS

吕氏春秋i 3423

【报错解决】彻底解决 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 报错

CondaHTTPError: HTTP 000 CONNECTION FAILED for url 错误本质上是由于 Conda 无法访问远程仓库引起的,常见原因包括网络不通、防火墙或安全软件阻拦、SSL 证书异常以及默认仓库不可达。解决该问题的关键在于:确保网络畅通、配置国内稳定镜像源、调整防火墙和安全设置、处理 SSL 证书问题,并保持 Conda 版本更新。通过这些方法,几乎可以彻底消除连接失败问题,保证 Conda 环境的正常使用和包管理的稳定性。

博客 1162

tsfknn 预测R语言中的时间序列

rolling参数应该设置为FALSE,这使得最后的18个观测值成为测试集,其余的作为训练集;如果我们将rolling参数设置为默认值TRUE,那么测试集就不会是一个恒定的向量。lag 滞后参数表示时间序列数据的滞后值。在这个例子中,由于我们的时间序列数据是月度的,我们将参数设置为1:12。作为药品福利计划的一部分,澳大利亚健康保险委员会记录的属于ATC代码A10的产品的每月政府支出(百万美元)。我们将使用tsfknn包,它可以用来预测R语言中的时间序列。格式:ts类别的月度时间序列。

Mrrunsen的博客 323

Android UI控件之Spinner实现省市区三级联动

上一篇文章中了解到了Spinner的简单用法,知道了Spinner的数据源一般有两种形式。         XML文件和数组的方式。这次的内容主要是想在Spinner上实现省市区三级联动,话不多说了          直接上效果图吧!             城市信息我将他放在strings.xml文件中,具体就不给出了,信息太大了            主xml文件如下: <

LCore的专栏 1万+

基于ESP32的智能健康监测系统开发

本文介绍了如何基于ESP32开发智能健康监测系统,从硬件选型、系统架构到软件实现的每一个环节。通过ESP32的Wi-Fi功能、传感器模块和云平台的结合,我们实现了实时健康数据监测、远程查看、报警等功能。系统的低功耗特性使得其适用于长期健康监测,能够为用户提供更便捷的健康管理方案。随着技术的不断发展,未来智能健康监测系统将进一步发展。例如,增加更多的传感器,提升数据分析能力,甚至通过人工智能算法来预测用户的健康趋势,为用户提供个性化的健康建议。

2201_76125393的博客 1104

android与HTML5相结合实现的省市县三级联动

在android开发中,用原生代码实现的省市县三级联动显得有些繁琐。前段时间,看到这样的应用:省市县三级联动的界面用HTML5实现,在android中布局webview加载html实现省市县的布局。 毕竟是加载html,显示布局以及选择省市县时会有点卡。先看看效果。 展开之后: 布局文件:main.xml <LinearLayout xmlns:and

cai1213的专栏 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Android_实现activity之间切换的动画效果(overridePendingTransition)
CTlive
博客等级 码龄10年 0粉丝 1原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值