Android菜鸟之listview下拉刷新

android列表下拉刷新功能 android列表下拉刷新功能源码,该效果可以让我们按住屏幕往下拉就可以达到刷新的功能,源码实现地非常不错的列表(ListView)的下拉刷新功能,感兴趣的朋友可以收藏起来吧。 This project aims to provide a reusable Pull to Refresh widget for Android. It was originally based on Johan Nilsson is library (mainly for graphics, strings and animations), but these have been replaced since. 立即下载

《1》首先我们要写一个自定义的listview(写一个类继承ListView类)

public class RefreshListView extends ListView

然后我们需要填充这个RefreshListView 

class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return dataList.size();
		}

		@Override
		public Object getItem(int position) {
			return null;
		}

		@Override
		public long getItemId(int position) {
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			TextView tv = new TextView(MainActivity.this);
			tv.setText(dataList.get(position));
			tv.setTextSize(18);
			return tv;
		}
	}

显示基本的数据列表




2》自定义RefreshListView 的头

/**
	 * 初始化ListView的頭佈局
	 */
	private void initHeader() {
		headView=LayoutInflater.from(getContext()).inflate(R.layout.listview_header, null);
		ivArrow = (ImageView) headView.findViewById(R.id.iv_listview_header_arrow);//
		ivArrow.setMinimumWidth(70);
		tvState = (TextView) headView.findViewById(R.id.tv_listview_header_state);
		tvLastUpdateTime = (TextView) headView.findViewById(
				R.id.tv_listview_header_last_update_time);
		mProgressBar = (ProgressBar) headView.findViewById(
				R.id.pb_listview_header_arrow);
		headView.measure(0, 0);//测量头布局的宽和高
		
		headerViewHeight = headView.getMeasuredHeight();//布局的高度155
		Log.i(TAG,"头布局的高度:"+headerViewHeight);
		headView.setPadding(0,-headerViewHeight,0,0);
		
		addHeaderView(headView);
		
		initAnimation();
		
	}

用到的listview_header.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dip" >

        <ImageView
            android:id="@+id/iv_listview_header_arrow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/common_listview_headview_red_arrow" />

        <ProgressBar
            android:id="@+id/pb_listview_header_arrow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" 
            android:visibility="gone"
            android:indeterminateDrawable="@drawable/custom_prograssbar"/>
    </FrameLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:gravity="center_horizontal"
        android:orientation="vertical" >

        <TextView
             android:id="@+id/tv_listview_header_state"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下來刷新"
            android:textColor="#FF0000"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_listview_header_last_update_time"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="最后刷新时间:1990-09-09 09:09:09"
            android:textColor="@android:color/darker_gray"
            android:textSize="14sp" />
    </LinearLayout>

</LinearLayout>

接下来我们要理解下拉的逻辑:

1)首先我们需要隐藏listView的头

2)实现public boolean onTouchEvent(MotionEvent ev) {

@Override
	public boolean onTouchEvent(MotionEvent ev) {
		switch (ev.getAction()) {
		case MotionEvent.ACTION_DOWN://下拉事件
			downY = (int)ev.getY();
			break;
		case MotionEvent.ACTION_MOVE:
			int moveY=(int) ev.getY();//移动中Y轴的偏移量
//			Log.i(TAG, "移動:"+moveY);
//			Log.i(TAG,"下移動:"+downY);
			int diffY=moveY-downY/3;
//			Log.i(TAG,"diffY:"+diffY);
			int paddingTop=-headerViewHeight+diffY;
			
			if(mfirstVisibleItem==0 && paddingTop>-headerViewHeight){//當前是在顶部
				if(paddingTop>0&¤tState==DOWN_REFRESH){//下拉刷新	
					Log.i(TAG,"完全显示了,可以松开刷新了");
					currentState=RELEASE_REFRESH;//鬆開刷新
					refreshHeaderViewState();
				}else if(paddingTop<0&¤tState==RELEASE_REFRESH){//正在刷新中
					Log.i(TAG,"没有完全显示,当前是下拉刷新");
					currentState=DOWN_REFRESH;
					refreshHeaderViewState();
				}
				headView.setPadding(0,paddingTop, 0, 0);
				return true;
			}
			
			headView.setPadding(0,paddingTop, 0,0);
			break;
		case MotionEvent.ACTION_UP:
			if(currentState==DOWN_REFRESH){//下拉刷新抬起手指,需要把头布局隐藏
				headView.setPadding(0,-headerViewHeight, 0, 0);
			}else if(currentState==RELEASE_REFRESH){//释放刷新 ,显示正在刷新中的状态
				currentState=REFRESHING;//正在刷新中
				refreshHeaderViewState();//刷新头布局的状态
				/**
				 * 去掉边距
				 */
				headView.setPadding(0, 0, 0, 0);
				
				if(mOnRefreshListener!=null){
					mOnRefreshListener.onDownRefresh();//刷新数据
				}
				//刷新完数据后 头隐藏
				
			}
			break;
		default:
			break;
		}
		return super.onTouchEvent(ev);
	}

3)计算滑动的距离,同时显示头
int paddingTop=-headerViewHeight+diffY;
4)自定义动画修改箭头(两个箭头转动的动画)
private void initAnimation() {
        upAnimation = new RotateAnimation(0, -180
                , Animation.RELATIVE_TO_SELF, 0.5f, 
                Animation.RELATIVE_TO_SELF, 0.5f);
        upAnimation.setDuration(500);
        upAnimation.setFillAfter(true);//停留在动画结束时
        
        downAnimation = new RotateAnimation(-180,-360
                , Animation.RELATIVE_TO_SELF, 0.5f, 
                Animation.RELATIVE_TO_SELF, 0.5f);
        upAnimation.setDuration(500);
        upAnimation.setFillAfter(true);//停留在动画结束时
    }

5)开始编写回调函数(判断头是否全部显示,然后加载数据,加载数据的同时修改图片为sing)
public interface OnRefreshListener  {
	/**
	 * 当下拉刷新时回调
	 */
	public void onDownRefresh();
	
	/**
	 * 当加载更多时回调
	 */
	public void onLoadMoring();
}

主界面加载数据/**
	 * 异步加载数据
	 */
	@Override
	public void onLoadMoring() {
		//异步去抓取数据
		
		new AsyncTask<Void, Void, Void>(){

			@Override
			protected Void doInBackground(Void... params) {
				SystemClock.sleep(2000);
				dataList.add("这是加载更多的数据1");
				dataList.add("这是加载更多的数据2");
				dataList.add("这是加载更多的数据3");
				return null;
			}

			@Override
			protected void onPostExecute(Void result) {
				mAdapter.notifyDataSetChanged();
				mRefreshListView.hideFooterView();//隐藏脚布局
				super.onPostExecute(result);
			}
			
		}.execute(new Void[]{});
	}

6)数据加载完毕,隐藏工作
/**
	 * 隐藏头布局
	 */
	public void hideHeaderView(){
		headView.setPadding(0, -headerViewHeight, 0, 0);
		mProgressBar.setVisibility(View.GONE);
		mProgressBar.clearAnimation();
		ivArrow.setVisibility(View.VISIBLE);
		tvState.setText("下来刷新");
		tvLastUpdateTime.setText("最后刷新时间:"+getLastUpdateTime());
		currentState=DOWN_REFRESH;
	}
7)自定义监听
/**
	 * 设置刷新的监听事件
	 * 刷新完之后需要用hideHeaderView(),隐藏头buju
	 * @param listener
	 */
	public void setOnRefreshListener(OnRefreshListener listener){
		this.mOnRefreshListener=listener;
	}


8)细节:/**
	 * 当滚动状态改变时回调
	 * SCroll_state_idle 停止状态
	 * scroll_state_touch_scroll 触摸滚动(按住移动)
	 * scroll_state_fing 			滚动滑动
	 */
	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		if(scrollState==SCROLL_STATE_IDLE||
				scrollState==SCROLL_STATE_FLING){
				if(isScrollToBottom && !isLoadMoring){
					isLoadMoring=true;//加载更多中
					Log.i(TAG,"滑動到底部");
					footerView.setPadding(0, 0, 0, 0);//显示脚布局
					//滚动到底部,使用脚布局显示
					this.setSelection(this.getCount());
					//调用注册监听事件
					if(mOnRefreshListener!=null){
						mOnRefreshListener.onLoadMoring();
					}
				}
		}
	}

	/**
	 * 当ListView滚动时回调方法
	 * 
	 * @param firstVisibleItem
	 *            当前屏幕第一个可见的item的索引
	 * @param visibleItemCount
	 *            当前屏幕显示了多少个item的数量
	 * @param totalItemCount
	 *            listView的总长度
	 */
	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
			int visibleItemCount, int totalItemCount) {
		mfirstVisibleItem = firstVisibleItem;
		if ((firstVisibleItem + visibleItemCount) == (totalItemCount)) {// 判断是否滚动到底部
//			Log.i(TAG, "滚动到底部,滚动到底部,滚动到底部,滚动到底部");
			isScrollToBottom = true;
		} else {
			isScrollToBottom = false;
		}
	}
源代码下载:http://download.youkuaiyun.com/detail/javamov/6948855
OCCT(Open CASCADE Technology)入门-2.搭建开发环境 安装完成后,在【扩展】菜单下会看到【Qt VS Tools】菜单,打开子菜单【options】进入qt配置窗口。打开VS后随便创建一个新项目,进入开发环境主页,打开顶部菜单【扩展】->【管理扩展】打开管理扩展窗口。然后点击右下角【创建】,一路【next】即可,最后会进入到开发主界面,得到一个下面的工程结构。好了,到这里基本的环境我们已经安装好了,下面我们开始创建项目并配置开发环境。打开顶部菜单【项目】,点击最后一个菜单项【xxx属性】,进入项目配置界面。这里的配置一般不用改,我们看【Versions】 阅读详情

相关推荐

ATE测试基础——直流参数测试

芯片测试在发展过程中诞生了许多术语,初次接触的人大部分都会被绕晕。因此为方便广大读者理解,在开始介绍测试项之前,需要对测试领域的名词进行解释。还有部分较为抽象的内容,需要略作展开。DUT——Device Under Test,正在被测试的器件Pin——器件引脚,信号引脚分为输入,输出,三态和双向四类,负责与外界进行信息交互;电源引脚分为电源和地两类,结构与信号引脚不同,负责给器件内部运行和外部输出提供电平。输入:在外部信号和器件内部逻辑之间起缓冲作用的信号输入通道;

你骄傲地飞远的博客 1万+

ListView从入门到中级,android菜鸟级别,

1.先简单写一个运用ListView 的小程序, 因为ListView是用来展示大量数据的,作为入门,我们就先将数据提供好,所以使用String数组。 1)先在activity_main.xml文件中写这样的程序,     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_par

zhangzhangliyin的博客 550

利用setEcoMode优化innovus中的ecoAddRepeater批量操作效率

本文详细介绍了在Cadence Innovus工具中,如何利用setEcoMode命令的batchMode参数,显著提升ecoAddRepeater命令在批量插入buffer或inverter时的操作效率。通过合并重复的初始化和数据库更新开销,该模式可将大规模时序修复操作的执行速度提升数倍,并提供了完整的脚本示例与最佳实践,帮助后端设计工程师优化ECO流程。

mango的博客 514

android 下拉刷新listview,Android中常见的下拉刷新ListView

下拉刷新在越来越多的应用程序中使用,它已经形成了默认的用户习惯,当遇到列表中显示的内容时,用户开始习惯性地下拉,那么中常见的下拉刷新ListView有哪些呢?下面就让爱站技术频道小编带你一起进入下文了解一下吧!在交互习惯上已经形成定性。之前在我的文章《IOS学习笔记34—EGOTableViewPullRefresh实现下拉刷新》中介绍过如何在IOS上实现下拉刷新的功能。今天主要介绍下在Andro...

weixin_42292183的博客 615

光学仿真案例(1) 铌酸锂非线性波导仿真模拟 FDTD仿真

在过去几年里,许多集成光子学应用往往需要多个相干可调谐光源,而且从外部激光器引入额外的光输入增加了芯片封装的复杂性,如果使用基于III-V族、氮化硅(SiN)或铌酸锂(LNO)的集成光源又大大增加了制造复杂性和成本。然而,通过非线性谐波相互作用产生的光源不需要额外的制造工艺来产生增益、反馈和外部电路,即可支持许多应用。在下面的案例中,演示了一种基于Luo[1]的铌酸锂波导频率转换集成系统。该案例主要仿真了利用温度调制实现高效相位匹配的铌酸锂纳米光子波导的二次谐波产生。

q895235273的博客 4145

嘉立创EDA vs Altium Designer:新手如何选择?从界面到实战全对比

本文全面对比了嘉立创EDA与Altium Designer(AD)两大PCB设计工具,从设计哲学、界面交互、封装库管理、设计规则引擎、协作功能到成本生态六大维度进行深入分析。嘉立创EDA以极简设计和云端协作为特色,适合学生和创客快速上手;而AD则凭借专业级精准控制,成为高端电子设计的行业标准。通过实战案例和详细对比表格,帮助新手根据项目需求选择合适的EDA工具。

weixin_30296405的博客 721

Android ListView的下拉刷新

好久没有写博客了,今天我就写一个listview的下拉刷新分享给大家,希望对大家学习或者工作上有所帮助,其实呢,大家都知道,在现在的app当中,下拉刷新是比较常用的功能,用到的地方太多了,所以,今天我也就结合自己的思想给家真理一下,那么好,接下来,让我们一起学习,让你分分钟写出自己想要的自定义listview下拉刷新 一:实现思路 1.实现将listview添加头部view,也就是下拉

ZengTao 993

WPF中使用TreeView封装组合控件TreeView+DataGrid

wpf的功能非常强大,很多控件都是原生的,但是要使用TreeView+DataGrid的组合,就需要我们自己去封装实现。功能如上图所示, 目前基本上把常用的样式都实现了,购买源码后,可以自行修改样式。本文源码效果如下,(搞了好几天,的确有难度,所以源码也收费,便宜,赚点辛苦费)第一种:技术的选择是TreeView(也就是本文的演示)。这2个图都是第三方控件自带的,并且都是收费使用。首先说明一下,实现上面的效果,有3种方法。本文演示的是使用TreeView的实现。第二种:技术的选择是DataGrid。

故里2130 1650

android 下拉刷新listview,实现Android下拉刷新的ListView

ListView的下拉刷新及上拉加载更多数据是我们开发中通常要实现的功能,开源项目中有很多的上下拉加载刷新的ListView可直接拿来使用,这几天刚好学习了下刷新的实现方式,把学习的资料做个记录:实现的简单效果图片:这是下拉时显示,文字可能有些不一样。向上返回如图:。此时放开手后,就有一个圆形进度条加载状态,加载完成后HeaderView部分(包括上面的图片,及加载条都是隐藏)。实现的代码:/**...

weixin_29229989的博客 745

Python 爬虫实战:爬取去哪儿网酒店评价,提取住宿体验关键词

本文介绍了基于去哪儿网酒店评价数据的爬取与分析方法。首先通过分析网页结构和数据加载机制,定位到评价数据的JSON接口及关键参数。然后使用Python搭建爬虫环境,实现多页评价数据的批量采集与存储,并通过反爬策略确保数据获取的稳定性。在文本分析环节,采用jieba分词和TF-IDF算法提取高频关键词,结合词云可视化展示用户关注点。分析结果显示位置、服务、卫生是核心关注维度,同时识别出好评与差评的关键驱动因素。该方法为酒店服务优化和消费者决策提供了数据支持,并可通过扩展实现更深入的情感分析和竞品对比。

2503_91057718的博客 1000

详解舵机的基本原理以及控制方法

文章目录什么是舵机?伺服控制硬件连接舵机规格SG90MG90SMG996R总结 什么是舵机? 舵机是伺服电机的一种,伺服电机就是带有反馈环节的电机,我们可以通过伺服电机进行精确的位置控制或者输出较高的扭矩; 舵机也叫也叫 RC 伺服器,通常用于机器人项目,也可以在遥控汽车,飞机等航模中找到它们。 类似舵机这样的伺服系统通常由小型电动机,电位计,嵌入式控制系统和变速箱组成。 电机输出轴的位置由内部电位计不断采样测量,并与微控制器(例如STM32,Arduino)设置的目标位置进行比较; 根据相应的偏差,控制

一名热爱技术的工程师的博客。分享技术干货,记录美好生活。永远相信美好的事情即将发生。 4万+

android中listview下拉刷新,Android菜鸟之listview下拉刷新

《1》首先我们要写一个自定义的listview(写一个类继承ListView类)public class RefreshListView extends ListView然后我们需要填充这个RefreshListViewclass MyAdapter extends BaseAdapter {@Overridepublic int getCount() {return dataList.size(...

weixin_30981569的博客 609

NTN(三) Timing

这篇看下k_offset和k_mac,如38.300所述,k_offset是配置的调度偏移量,需要大于或等于service link RTT和Common TA之和;k_mac 是配置的偏移量,需要大于或等于 RP 和 gNB 之间的 RTT。 相关参数会通过RRC层NTN-config配置,其中的cellSpecificKoffset-r17和kmac-r17主要用于各种Timing场景的偏移。 kmac:如果DL和UL frame timing 在 gNB端未对齐,网络端

asd199086的博客 4828

android ListView下拉刷新及上拉加载 (自定义ListView,可直接使用)

今天同事提到要做列表的刷新和加载更多我想到现在项目上的ListView的加载当初为了赶项目直接借鉴别人的Ctrl+C and Ctrl+V做出来的,体验不是很好。所以我就再次查看了原来的代码,并参考后自己写了一个。 ListView是android项目常用到的控件之一,刷新和加载也难倒了很多项我一样的菜鸟。很多人会觉得重写ListView会很麻烦,所以我今天试着写了一个。 列表滑动监听AbsL

gys19921114的博客 570

IEM模型,地表粗糙度模拟

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

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android 关于Scrollview和listview嵌套以及下拉刷新问题(附源码)

本人Android菜鸟,在做东西时候发现有时候我们需要在项目中使用scrollview和listview的结合才能使项目看起来更加完善,但是谷歌官网是不推荐scrollview和listview一起嵌套的,因为这俩个东西嵌套后会出现很多事件冲突。但是有时候就是需要这样的搭配怎么办?所以有些牛人自定义了view来满足这样的需求。好了,废话不多说,上代码 package com.exampl

陌生人 3741

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android ScrollView 嵌套 ListView、 ListView 嵌套ScrollView Scroll事件冲突解决办法

本人菜鸟一名,最近工作了,开始学习Android。 最近在做项目的时候,UX给了个design,大概就是下拉刷新的ListView中嵌套了ScrollView,而且还要在ScrollView中添加动画。 在ListView中嵌套使用ScrollView这种方式是不推荐使用的,但是为了满足UX的设计(UX、QA至上,不然BUG绝逼要来)。 为了解决这个问题,菜鸡开始网上查阅资料,但是...

dhk1980的博客 164

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Android菜鸟日记28-listView下拉更新[仿新浪微博]

  Android菜鸟日记 28 listView下拉更新[仿新浪微博]   老用ios的下拉刷新 觉得用户体验很好 考虑自己做一个 本来以为是使用slidingDrawer 弄了半天才发现不是。 在网上收集了下资料,找到个还不错的[附件有] 修改了内容做给HDEasyCall用了。   如果完全解释那个 太费时间了 还是把它当做一个控件来用吧 里面的东西别管他了。   ...

ipoolo的专栏 222

关于listView,我想说的

导读listView在android中是很重要的控件,也是菜鸟view入门的一个很好的台阶。通过它可以了解view的滑动,观察者模式,缓存,生产者消费者模式,已经listView特有的view复用机制等等。个人比较遗憾的是,接触listView已经很久了,但一直没有真的理解(可能直接里结果,但现在忘记了)。 通过最近这个项目,重新接触了listView,在项目中也遇到了一些问题,犯了一些错,相信这

MBlog 369

Fragment里面listview在头部嵌套gridview无限刷新错误解决

Fragment里面listview在头部嵌套gridview无限刷新错误解决

version1_0的博客 835

IOS 菜鸟笔记 之 项目 三

1.项目需求 自定义UITableView的类似Android的ListView的adapter 实现UITableView下拉刷新和上拉加载功能 2.功能分析对于Adapter: 定义 _TBaseAdapter类 实现 UITableView必备的两个Delegate 为了简便和减少冗余代码,定义_TBaseAdapterDelegate代理来实现数据的赋值填充和对应的UITableViewCe

Shadow的专栏 817

listView的流畅性优化

最近完成一个项目,由于我是个新手,这几天卡在了listview的性能问题上,总是会有卡顿现象,下拉刷新也会出现少许卡顿的感觉。我有强迫症,实在受不了这么一点儿的不流畅,然后上网找了很多方法,试了很多异步加载图片的例子,自己使用了下四次元,很喜欢,很流程,做得很好,可是源码都没有注释,菜鸟表示看不懂。 最后我用了universal-image-loader去完成异步加载图片,这次总结: 1.使用...

weixin_34224941的博客 135

android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题...

android 在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: 1 @Override 2 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItem...

weixin_30512089的博客 151

Android优秀开源项目

菜鸟最近需要做android方面的作业,于是就开始学习android了,在网上找的开源代码,好像有些是要钱的,看到了一个爬爬的博客,上面给出了许多优秀的开源项目,跟大家分享一下,希望菜鸟们能早日成长。。。 网址:http://blog.tisa7.com/android_open_source_projects 项目篇: Apollo音乐播放器:就一个播放器,但是实现的很好 osc

oqqFengniao123456789的专栏 1064

android 网易新闻布局,Android实践之仿网易新闻

今天由于做练习项目用,要用到像网易新闻那样的界面布局,找了很多资料,快速开发的工具特别多,现有的源码也特别多,但是觉得直接复制到自己的代码中,又嫌它太大了,于是决定从现有的资源学习并试着整一个,减少代码量,以后工作中如果遇到就打算直接套入,当然了,对于大侠来说,UI简直就是小菜一碟,但是对于菜鸟的我来说,还是处于慢慢积累的阶段中,从开始学android到现在,自己的代码库也渐渐多了很多实用的东西起...

weixin_31089065的博客 445

收集一些工作中遇到的好的文章,全部转载

1.Android判断是否网络可连:

qq602298560的专栏 605

android ListView详解

在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。抽空把对ListView的使用做了整理,并写了个小例子,如下图。  列表的显示需要三个元素: 1.ListVeiw 用来展示列表的View。 2.适配器 用来把数据映射到ListView上的中介。 3.数据    具体的将被映射的字符串,图片,或者基

菜鸟的大神梦的专栏 574
上一篇: Android的跨进程通信
下一篇: Java基础菜鸟之单例设计模式
linuxMinx
博客等级 码龄15年 195粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值