当前位置:首页 » 安卓系统 » android上下拉

android上下拉

发布时间: 2022-08-31 04:21:08

A. android下拉上拉刷新同事从在怎么回调数据

注意事项:
1、XListView因为添加了Header,会导致存储的数据+1,所以赋值时需要position-1。补充:当去掉HeaderView时,position不用-1。
2、提个建议:上拉加载更多,最好在onCreate()中就执行setAdapter,然后不论是空数据、还是有数据,只用更新适配器就行了。
一、XListView
1、下载
gitHub的地址。或者从这儿下。
2、用法
导入图中的me.maxwin.view包
提供了两个接口:
IXListViewListener:触发下拉刷新,上拉加载更多。实现此接口时,onLoadMore()用来上拉加载更多,onRefresh()用来下拉刷新。
OnXScrollListener:和原生的OnScrollListener一样,但是在header/footer回滚时也会触发。
几个常用方法:
setPullRefreshEnable(boolean enable):是否允许下拉刷新

setPullLoadEnable(boolean enable):是否允许上拉加载更多

stopRefresh():停止刷新,重置header view

stopLoadMore():停止加载更多,重置footer view

请求到数据后停止刷新停止加载更多。
setRefreshTime(String time):设置上次刷新的时间

onLoadMore():加载更多时调用的方法。注意第一次进入时不会调用此方法。

onRefresh():下拉刷新时调用的方法。

3、代码中怎么体现
1)实现IXListViewListener接口->2)实现上拉刷新和下拉加载更多的数据变更->3)更新header view和footer view,并设置更新时间。

[java] view plain
//1、实现IXListViewListener接口
mListView.setXListViewListener(this);
//2.1 onRefresh中实现下拉刷新的数据加载
@Override
public void onRefresh() {
//请求数据
//更新界面显示

[java] view plain
onLoad();
}//2.2 onLoadMore中实现上拉加载更多的数据加载

[java] view plain
@Override
public void onLoadMore() {
//请求数据

//更新界面显示

[java] view plain
onLoad();

}//3、加载完数据后,复位header view和footer view,并设置更新的时间。

[java] view plain
private void onLoad() {
mListView.stopRefresh();mListView.stopLoadMore();
mListView.setRefreshTime("刚刚");
}
4、xml注意事项
当将XListView嵌入到LinearLayout中时,XListView占满全屏时不能再加载更多。上错误代码:

[java] view plain
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/takemain_ll"
android:layout_below="@id/takemain_l"
android:orientation="vertical" >

<cn.bestbang.rable_consumer_goods.utils.MyExXListView
android:id="@+id/home_list"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</cn.bestbang.rable_consumer_goods.utils.MyExXListView>
</LinearLayout>
5、去ScrollView共用
这种情况,重写XListView会导致上拉加载时频繁的报错:适配器未更新,不知道咋解决。

二、PullToRefresh
大部分内容转自鸿洋的博客:http://blog.csdn.net/lmj623565791/article/details/38238749
1、整体了解:
首先,github上的这个控件:pull-to-refresh,例子中的功能非常强大,可不止支持ListView和GridView。在下载前,先说下项目结构。github上下载的例子,是依赖于三个项目的,一个基本的library_pullToRefresh(自己要引用到的项目。怎么引用?自己的项目右键->Properties->Android,在Is Library中选择路径),一个基本的PullToRefreshViewPager,一个PullToRefreshListFragment。
2、用法
1)设置PullToRefreshListView支持上拉加载和下拉刷新->2)初始化控件,设置适配器->3)设置监听事件。在监听事件中处理上拉加载更多和下拉刷新,设置最后更新的时间。

[java] view plain
<pre name="code" class="java"><pre name="code" class="java">//1、支持上拉加载和下拉刷新
mPullRefreshListView.setMode(Mode.BOTH);

//2、设置适配器 mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mListItems); mPullRefreshListView.setAdapter(mAdapter); //3、设置监听器mPullRefreshListView.setOnRefreshListener(new OnRefreshListener2<ListView>(){ @Override public void onPullDownToRefresh( PullToRefreshBase<ListView> refreshView){ // 显示最后更新的时间 refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label); //这里写下拉刷新的任务 new GetDataTask().execute(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView){ // 显示最后更新的时间 refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
[java] view plain
//这里写上拉加载更多的任务
new GetDataTask().execute(); } });

3、属性介绍
1)ptr:ptrMode="both"支持上拉加载和下拉刷新。disabled禁用下拉刷新和上拉加载。pullFromEnd仅支持上拉加载。manualOnly只允许手动触发。当然通过代码也可设置:lv.setMode(Mode.BOTH);
2)ptr:trAnimationStyle="flip" flip:翻转动画;rotate:旋转动画。
3)ptr:ptrDrawable="@drawable/ic_launcher"设置图标
4)刷新的时候,是否允许ListView或GridView滚动。觉得为true比较好。5)ptrListViewExtrasEnabled 决定了Header,Footer以何种方式加入mPullRefreshListView,true为headView方式加入,就是滚动时刷新头部会一起滚动。
4、自定义下拉指示器文本内容等效果:
在初始化完成PullToRefreshListView后,通过lv.getLoadingLayoutProxy()可得到一个ILoadingLayout对象,这个对象可设置各种指示器中的样式、文本等。

[java] view plain
ILoadingLayout startLabels = mPullRefreshListView
.getLoadingLayoutProxy();
startLabels.setPullLabel("你可劲拉,拉...");// 刚下拉时,显示的提示
startLabels.setRefreshingLabel("好嘞,正在刷新...");// 刷新时
startLabels.setReleaseLabel("你敢放,我就敢刷新...");// 下来达到一定距离时,显示的提示
默认是上拉和下拉的字同时改变的,如果希望单独改变呢:

[java] view plain
private void initIndicator(){
ILoadingLayout startLabels = mPullRefreshListView
.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("你可劲拉,拉...");// 刚下拉时,显示的提示
startLabels.setRefreshingLabel("好嘞,正在刷新...");// 刷新时
startLabels.setReleaseLabel("你敢放,我就敢刷新...");// 下来达到一定距离时,显示的提示

ILoadingLayout endLabels = mPullRefreshListView.getLoadingLayoutProxy(
false, true);
endLabels.setPullLabel("你可劲拉,拉2...");// 刚下拉时,显示的提示
endLabels.setRefreshingLabel("好嘞,正在刷新2...");// 刷新时
endLabels.setReleaseLabel("你敢放,我就敢刷新2...");// 下来达到一定距离时,显示的提示
}

B. Android下拉刷新,上拉加载,有没有比较好的第三方库

目前我使用的有两个:SwipeRefreshLayout和PullToRefresh:下拉刷新控件SwipeRefreshLayout,但是这个控件仅仅支持下拉刷新,用起来还算可以。然而在我们实际开发应用中,很多地方都不止有下拉刷新,而且还有上拉加载的功能。当然,你完全可以自己写layout通过add的方式实现,但是既然有开源的力量让我们有幸能用到PullToRefresh这个资源

C. android中上下拉刷新怎么实现

这个可能iphone控件的这个功能好实现一点,android的scroll很难去捕捉,不过你不觉得当所有的系统都是类似,或者山寨时,这个世界还会有人去发挥想象力创造么。。。

D. android recyclerview 怎么实现上拉加载下拉刷新

代码如下:
引入
compile 'me.leefeng:lfrecyclerview:1.0.1'

/*找到控件*/
recycleview = (LFRecyclerView) findViewById(R.id.recycleview);

/*设置属性*/
recycleview.setLoadMore(true);//设置为可上拉加载,默认 false
recycleview.setRefresh(true);// 设置为可下拉刷新,默认 true
recycleview.setAutoLoadMore(true);//设置滑动到底部自动加载,默认 false
recycleview.setOnItemClickListener(this);// 条目点击,点击和长按监听
recycleview.setLFRecyclerViewListener(this);//下拉刷新上拉加载监听
recycleview.setScrollChangeListener(this);//滑动监听
recycleview.hideTimeView();//隐藏时间,默认显示时间
recycleview.setHeaderView(tv);//设置一个头部,只有一个大概满足了多数的要求
recycleview.setNoDateShow();//没有数据时,底部显示"没有数据"字样,默认不显示

/*添加适配器*/
adapter=new MainAdapter(list);
recycleview.setAdapter(adapter);

E. android中listview的下拉刷新上拉加载是怎么实现的

这是两个分开的部分。如果你是新手,先一个一个来。

我只能跟你说一下思路,具体的东西你在网上查查,不行再问我,新手的话慢慢来。

  1. 下拉刷新,获取listview的下拉时间显示header,然后调用更新数据的接口就可以了。

  2. 上啦加载,是分页获取数据,获取listview的是否拉到最底,如果拉倒最底,获取数据,让后list的数据添加获取的数据,更新adapter就可以了。


F. 如何把应用软件添加到安卓手机的下拉菜单上

摘要 增强系统功能多半要借助APP来实现,这次也不例外,我们要通过《AntTek Quick Settings》这款应用来实现。

G. 安卓手机屏幕上方拉下拉菜单怎么设置

不知道你用的是什么版本的系统,但基本上都在设置里的界面设置里面,可以找到状态栏设置,有关于隐藏通知栏的设置,你把那个勾选去掉就可以了。

H. 安卓下拉控制中心怎么设置

1.在华为手机的桌面上,下滑打开控制中心。
2.在控制中心,打开右上角编辑菜单,选择【编辑快捷开关】。
3.进入编辑快捷开关操作页面,通过拖动图标完成具体开关调整后,点击【完成】即可。

I. android中怎么实现上拉刷新

这篇文章主要介绍了android实现listview下拉刷新和上拉刷新效果,Android的ListView上拉下拉刷新,原理都一样,在Touch事件中操作header/footer的paddingTop属性,需要的朋友可以参考下

{

privatestaticfinalStringTAG=PullToLoadListView.class.getSimpleName();

privatestaticfinalintSTATE_NON=0;
privatestaticfinalintSTATE_PULL_TO_REFRESH=1;
privatestaticfinalintSTATE_RELEASE_TO_REFRESH=2;
privatestaticfinalintSTATE_REFRESHING=3;

privateintstate;

privateintfirstVisibleItem;
privateintlastVisisibleItem;

privatefloatprevY=0;

privateViewheaderView;
privateViewfooterView;

//headerwidgets
;
;
privateTextViewheaderText;
;
;
//footerwidgets
;
privateTextViewfooterText;

privatebooleanheaderIsHanding=false;
privatebooleanfooterIsHanding=false;

privateintheaderHeight;
privateintfooterHeight;

;

;

;

publicPullToLoadListView(Contextcontext){
super(context);
init(context);
}

publicPullToLoadListView(Contextcontext,AttributeSetattrs){
super(context,attrs);
init(context);
}

privatevoidinit(Contextcontext){
state=STATE_NON;
firstVisibleItem=0;
lastVisisibleItem=0;

LayoutInflaterinflater=LayoutInflater.from(context);
headerView=inflater.inflate(R.layout.view_pull_header,null);
footerView=inflater.inflate(R.layout.view_pull_footer,null);

headerProgressBar=(ProgressBar)headerView.findViewById(R.id.progressbar);
headerImageArrow=(ImageView)headerView.findViewById(R.id.arrow);
headerText=(TextView)headerView.findViewById(R.id.text);
headerArrowAnim=newRotateAnimation(0,-180,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
headerArrowAnim.setDuration(300);
headerArrowAnim.setFillAfter(true);
headerArrowReverseAnim=newRotateAnimation(-180,0,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
headerArrowReverseAnim.setDuration(300);
headerArrowReverseAnim.setFillAfter(true);

footerProgressBar=(ProgressBar)footerView.findViewById(R.id.progressbar);
footerText=(TextView)footerView.findViewById(R.id.text);

measureView(headerView);
measureView(footerView);
headerHeight=headerView.getMeasuredHeight();
footerHeight=footerView.getMeasuredHeight();
headerView.setPadding(0,-1*headerView.getMeasuredHeight(),0,0);
footerView.setPadding(0,-1*footerView.getMeasuredHeight(),0,0);
headerView.invalidate();
footerView.invalidate();
addHeaderView(headerView,null,false);
addFooterView(footerView,null,false);

super.setOnScrollListener(this);
}

privatevoidmeasureView(Viewview){
ViewGroup.LayoutParamslp=view.getLayoutParams();
if(lp==null){
lp=newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
}
intchildWidthSpec=ViewGroup.getChildMeasureSpec(0,0,lp.width);
intchildHeightSpec;
if(lp.height>0){
childHeightSpec=MeasureSpec.makeMeasureSpec(0,MeasureSpec.EXACTLY);
}else{
childHeightSpec=MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);
}
view.measure(childWidthSpec,childHeightSpec);
}

privatevoidresetHeader(){
//headerView.setPadding(0,-1*headerHeight,0,0);
resetAnim=newResetAnimation(headerView,headerHeight,headerView.getPaddingTop());
resetAnim.start();
}

privatevoidresetFooter(){
resetAnim=newResetAnimation(footerView,footerHeight,footerView.getPaddingTop());
resetAnim.start();
}

(intstate){
if(this.state==state){
return;
}
intprevState=this.state;
this.state=state;

switch(state){
caseSTATE_NON:
headerProgressBar.setVisibility(View.INVISIBLE);
headerImageArrow.setVisibility(View.VISIBLE);
headerImageArrow.clearAnimation();
headerText.setText("PullDownToRefresh");
break;
caseSTATE_PULL_TO_REFRESH:
headerProgressBar.setVisibility(View.INVISIBLE);
headerImageArrow.setVisibility(View.VISIBLE);
headerText.setText("PullDownToRefresh");
if(prevState==STATE_RELEASE_TO_REFRESH){
headerImageArrow.startAnimation(headerArrowReverseAnim);
}else{
headerImageArrow.clearAnimation();
}
break;
caseSTATE_RELEASE_TO_REFRESH:
headerProgressBar.setVisibility(View.INVISIBLE);
headerImageArrow.setVisibility(View.VISIBLE);
headerImageArrow.startAnimation(headerArrowAnim);
headerText.setText("ReleaseToRefresh");
break;
caseSTATE_REFRESHING:
headerProgressBar.setVisibility(View.VISIBLE);
headerImageArrow.setVisibility(View.INVISIBLE);
headerImageArrow.clearAnimation();
headerText.setText("Refreshing");
break;
default:
break;
}
}

(intstate){
if(this.state==state){
return;
}
this.state=state;

switch(state){
caseSTATE_NON:
footerProgressBar.setVisibility(View.INVISIBLE);
footerText.setText("PullUpToRefresh");
break;
caseSTATE_PULL_TO_REFRESH:
footerProgressBar.setVisibility(View.INVISIBLE);
footerText.setText("PullUpToRefresh");
break;
caseSTATE_RELEASE_TO_REFRESH:
footerProgressBar.setVisibility(View.INVISIBLE);
footerText.setText("ReleaseToRefresh");
break;
caseSTATE_REFRESHING:
footerProgressBar.setVisibility(View.VISIBLE);
footerText.setText("Refreshing");
break;
default:
break;
}
}

@Override
publicvoidsetOnScrollListener(OnScrollListenerl){
this.onScrollListener=l;
}

(){
this.onLoadingListener=onLoadingListener;
}

publicvoidloadCompleted(){
if(headerIsHanding){
changeHeaderViewByState(STATE_NON);
resetHeader();
headerIsHanding=false;
}
if(footerIsHanding){
changeFooterViewByState(STATE_NON);
resetFooter();
footerIsHanding=false;
}
}

(MotionEventev){
headerIsHanding=true;
floattempY=ev.getRawY();
floatvector=tempY-prevY;
vector/=2;
prevY=tempY;
if(vector>0){
intnewPadding=(int)(headerView.getPaddingTop()+vector);
newPadding=Math.min(newPadding,headerHeight/2);
headerView.setPadding(0,newPadding,0,0);
if(state!=STATE_REFRESHING){
if(newPadding>0){
changeHeaderViewByState(STATE_RELEASE_TO_REFRESH);
}else{
changeHeaderViewByState(STATE_PULL_TO_REFRESH);
}
}
}else{
if(state==STATE_RELEASE_TO_REFRESH||state==STATE_PULL_TO_REFRESH){
intnewPadding=(int)(headerView.getPaddingTop()+vector);
newPadding=Math.max(newPadding,-1*headerHeight);
headerView.setPadding(0,newPadding,0,0);
if(newPadding<=-1*headerHeight){
changeHeaderViewByState(STATE_NON);
headerIsHanding=false;
}elseif(newPadding<=0){
changeHeaderViewByState(STATE_PULL_TO_REFRESH);
}else{

}
}
}
}

(MotionEventev){
footerIsHanding=true;
floattempY=ev.getRawY();
floatvector=tempY-prevY;
vector/=2;
prevY=tempY;
if(vector<0){
intnewPadding=(int)(footerView.getPaddingTop()-vector);
if(newPadding>0){
newPadding=0;
}
footerView.setPadding(0,newPadding,0,0);
if(state!=STATE_REFRESHING){
if(newPadding<0){
changeFooterViewByState(STATE_PULL_TO_REFRESH);
}else{
changeFooterViewByState(STATE_RELEASE_TO_REFRESH);
}
}
}else{
intnewPadding=(int)(footerView.getPaddingTop()-vector);
newPadding=Math.min(newPadding,footerHeight);
footerView.setPadding(0,newPadding,0,0);
if(newPadding<=-1*footerHeight){
changeFooterViewByState(STATE_NON);
footerIsHanding=false;
}elseif(newPadding<0){
changeFooterViewByState(STATE_PULL_TO_REFRESH);
}
}
}

J. android scrollview如何判断是上拉还是下拉

/**
* 可以监听ScrollView的上下滑动 ,实现ScrollListener接口,调用setScrollListener(ScrollListener l)方法。
* SCROLL_UP :ScrollView正在向上滑动
* SCROLL_DOWN :ScrollView正在向下滑动
* @author yxw
*/
public class ObservableScrollView extends ScrollView {

private ScrollListener mListener;

public static interface ScrollListener {
public void scrollOritention(int oritention);
}

/**
* ScrollView正在向上滑动
*/
public static final int SCROLL_UP = 0x01;

/**
* ScrollView正在向下滑动
*/
public static final int SCROLL_DOWN = 0x10;

/**
* 最小的滑动距离
*/
private static final int SCROLLLIMIT = 40;

public ObservableScrollView(Context context) {
super(context, null);
}

public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs, 0);
}

public ObservableScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}

@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);

if (oldt > t && oldt - t > SCROLLLIMIT) {// 向下
if (mListener != null)
mListener.scrollOritention(SCROLL_DOWN);
} else if (oldt < t && t - oldt > SCROLLLIMIT) {// 向上
if (mListener != null)
mListener.scrollOritention(SCROLL_UP);
}
}

public void setScrollListener(ScrollListener l) {
this.mListener = l;
}
}

热点内容
战地配置有哪些 发布:2024-10-18 16:44:48 浏览:308
中国联通短信提示服务密码未完善是什么意思 发布:2024-10-18 16:42:17 浏览:709
c语言中非 发布:2024-10-18 16:21:20 浏览:143
招编程人员 发布:2024-10-18 16:19:37 浏览:422
什么数据类型存储图片 发布:2024-10-18 16:19:28 浏览:749
电脑维护服务器 发布:2024-10-18 16:18:51 浏览:435
取舍算法 发布:2024-10-18 16:12:36 浏览:249
安卓数据线一般在什么价位 发布:2024-10-18 16:09:25 浏览:732
老式安卓机怎么插卡 发布:2024-10-18 15:52:35 浏览:338
pc搭建nas服务器 发布:2024-10-18 15:51:59 浏览:266