android 模仿知乎下拉重新整理和上拉載入
效果圖如下
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="net.sytm.swiperefreshlayout.MainActivity"> <android.support.v4.widget.SwipeRefreshLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/swipe_id"> <net.sytm.widget.CustomerListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/list_view_id" /> </android.support.v4.widget.SwipeRefreshLayout> </RelativeLayout>
MainActivity.java
package net.sytm.swiperefreshlayout; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.widget.ArrayAdapter; import net.sytm.widget.CustomerListView; import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity implements CustomerListView.Callback { private MHandler mHandler; private SwipeRefreshLayout refreshLayout; private CustomerListView listView; private List<String> list; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler = new MHandler(this); initUI(); bindData(); } private void initUI() { refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_id); refreshLayout.setColorSchemeResources( android.R.color.holo_blue_bright, android.R.color.holo_green_light, android.R.color.holo_orange_light, android.R.color.holo_red_light); refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { downData(); } }); listView = (CustomerListView) findViewById(R.id.list_view_id); listView.setCallback(this); } private void bindData() { list = new ArrayList<>(); for (int i = 0; i< 3; i++) { list.add(String.valueOf(i)); } adapter = new ArrayAdapter<>(this, android.R.layout.simple_expandable_list_item_1, list); listView.setAdapter(adapter); } @Override public void downData() { mHandler.sendEmptyMessageDelayed(0, 2000); } @Override public void loadData() { mHandler.sendEmptyMessageDelayed(1, 2000); } static class MHandler extends Handler { final WeakReference<MainActivity> activityWeakReference; MHandler(MainActivity activity) { this.activityWeakReference = new WeakReference<>(activity); } @Override public void handleMessage(Message msg) { MainActivity activity = activityWeakReference.get(); if (activity == null) { return; } switch (msg.what) { case 0: activity.list.add("hutao"); activity.adapter.notifyDataSetChanged(); activity.refreshLayout.setRefreshing(false); break; case 1: activity.list.add("php"); activity.adapter.notifyDataSetChanged(); activity.listView.hideFootView(); break; } } } }
foot_view.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <ProgressBar android:layout_width="wrap_content" android:layout_height="wrap_content" style="@style/Widget.AppCompat.ProgressBar"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="載入更多" android:textColor="@android:color/darker_gray"/> </LinearLayout>
CustomerListView.java
package net.sytm.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListView;
import net.sytm.swiperefreshlayout.R;
/**
* 編碼人 胡桃
* 日期 2016/7/25
*/
public class CustomerListView extends ListView implements AbsListView.OnScrollListener {
private Context context;
private Callback callback;
private View footView;
public CustomerListView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initUI();
}
private void initUI() {
footView = LayoutInflater.from(context).inflate(R.layout.foot_view, null);
footView.setVisibility(View.GONE);
this.addFooterView(footView);
this.setFooterDividersEnabled(false);
this.setOnScrollListener(this);
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE
&& this.getLastVisiblePosition() == this.getCount() - 1) {
footView.setVisibility(View.VISIBLE);
callback.loadData();
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//int lastIndex = firstVisibleItem + visibleItemCount - 1 - 1;
}
public void hideFootView() {
footView.setVisibility(View.GONE);
}
public void setCallback(Callback callback) {
this.callback = callback;
}
public interface Callback {
void downData();
void loadData();
}
}
原始碼下載地址 http://download.csdn.net/detail/hu285279904/9655839
相關推薦
android 模仿知乎下拉重新整理和上拉載入
效果圖如下 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/
android smartRefresh下拉重新整理和上拉載入
1.遠端依賴 compile 'com.scwang.smartrefresh:SmartRefreshLayout:1.0.5.1' 2.佈局中使用 <com.scwang.smartrefresh.layout.SmartRefreshLayout androi
Android下拉重新整理和上拉載入
先看看XML佈局檔案,下拉重新整理和上拉載入哪個在外層並沒有什麼影響。最裡面嵌套了一個RecycleView。 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/gridswipre
android自定義下拉重新整理和上拉載入控制元件
import android.content.Context; import android.graphics.Point; import android.support.v4.view.MotionEventCompat; import android.support.v4.view.NestedScro
Android分組列表懸停顯示,分組listView懸停效果,帶下拉重新整理和上拉載入更多
分組列表,帶下拉重新整理和上拉載入更多【專案地址在文章最後!!】 效果圖: 實現過程,借鑑PinnedHeadListView,但是該demo沒有下拉重新整理功能,故將該控制元件整合到PullToRefresh 庫中,【PullToRefresh 庫為第
Android RecyclerView下拉重新整理和上拉載入封裝
效果圖:程式碼已經同步到github~Gradle引入依賴: allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
(Android)五分鐘讓你輕鬆學會下拉重新整理和上拉載入更多
分享一個谷歌自帶的下拉重新整理和上拉載入更多例子: 先看效果圖: /** * 繼承自SwipeRefreshLayout,從而實現滑動到底部時上拉載入更多的功能. */ public class RefreshLayout extends SwipeRefreshL
Android 自定義下拉重新整理和上拉載入
完整程式碼在最下面。。 頭佈局xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pare
Android簡單實現下拉重新整理和上拉重新整理
先把佈局檔案裡面新增一個ListView控制元件, <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.a
微信小程式下拉重新整理和上拉載入
example One:如果所有頁面都要開啟下拉重新整理功能: aap.json中: "window":{ "enablePullDownRefresh":true, //開啟下拉重新整理功能 "navigatio
史上最全的使用RecyclerView實現下拉重新整理和上拉載入更多
前言: 縱觀多數App,下拉重新整理和上拉載入更多是很常見的功能,但是谷歌官方只有一個SwipeRefreshLayout用來下拉重新整理,上拉載入更多還要自己做。 本篇文章基於RecyclerView簡單封裝了這兩個操作,下拉重
MUi下拉重新整理和上拉載入click事件失效問題
今天應用MUi的上拉載入更多方法後,發現給li元素註冊點選click事件沒有反應。 最後折騰半個小時發現一個方法,用mui.on( )新增事件監聽,用tap代替click事件即可解決 mui("#ulId").on("tap","li",function(){ // 邏輯程式碼
template-web.js 結合dropload.min.js下拉外掛實現下拉重新整理和上拉載入
//引入js,所需要的js已經上傳到個人資源 <script type="text/javascript" src="/web/home/js/template-web.js"></script> <link href="/web/h
vue 下拉重新整理和上拉載入公共元件
這個效果也是...只能說我這個上拉載入的時候也要有彈性的那種感覺,所以我在別人的元件中修改了一下下,但是也不是特別的理想吧,希望你們還能多多指出好讓我加以更正,我們共同學習,好不,哈哈, 我先附上我看到別人網上寫的,我覺得人家寫的是蠻不錯的。 https://www.cnblogs.com/sichaoy
帶有下拉重新整理和上拉載入的的ExpandableListView
<pre name="code" class="java">package com.redhorse.widget; import android.content.Context; import android.util.AttributeSet; impor
自定義ListView實現下拉重新整理和上拉載入
實現ListView的下拉重新整理和上拉載入,需要先新增headerView和footerView,通過在拖動的過程中,控制頭尾佈局的paddingTop實現。先把paddingTop設為負值,來隱藏header,在下拉的過程中,不斷改變headerView的p
Flutter如何實現下拉重新整理和上拉載入更多
效果 下拉重新整理 如果實現下拉重新整理,必須藉助RefreshIndicator,在listview外面包裹一層RefreshIndicator,然後在RefreshIndicator裡面實現onRefresh方法。 body: movie
當scrollview巢狀多個recyclerview時如何實現整個頁面的下拉重新整理和上拉載入
最近做的一個專案中有個佈局比較複雜一點,整個頁面是個srollview裡面又嵌套了幾個recycview,剛開始是有的滑動衝突卡頓的問題,通過如下方法解決了 mRecyclerView.setLayoutManager(new GridLayoutManager(getContext(),
RecyclerView三種顯示方式的下拉重新整理和上拉載入更多
但是之前寫的那個有一點點的小問題,如果上拉重新整理,重新整理小圖示還沒有移動到重新整理位置,重新整理資料就已經獲取到,並且呼叫了setRefreshing(false),在setRefreshing(false)中會去呼叫translationTo(int from,i
手把手教你實現RecyclerView的下拉重新整理和上拉載入更多
個人原創,轉載請註明出處http://blog.csdn.net/u012402124/article/details/78210639 2018年10月25日更新 讓大家花費時間看文章卻沒有解決需求,隨著bug的增多內心的愧疚感逐漸增強,但幾個月前的程式