當前位置:首頁 » 安卓系統 » 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;
}
}

熱點內容
qq系統頭像文件夾 發布:2024-10-18 14:14:55 瀏覽:234
安卓手機請輸入密碼在哪裡 發布:2024-10-18 14:13:28 瀏覽:645
設計編譯程序注意的問題 發布:2024-10-18 14:08:43 瀏覽:254
傳智播客android視頻 發布:2024-10-18 14:04:42 瀏覽:904
手機版安卓吃雞哪個好 發布:2024-10-18 14:01:40 瀏覽:491
編程自學入門教程 發布:2024-10-18 13:50:58 瀏覽:141
伊迪阿明訪問中國 發布:2024-10-18 13:49:54 瀏覽:10
人三琳外傳腳本 發布:2024-10-18 13:38:16 瀏覽:839
電腦發件箱伺服器錯誤怎麼弄 發布:2024-10-18 13:30:36 瀏覽:914
evm部署solc編譯文件 發布:2024-10-18 13:29:47 瀏覽:835