前篇已經(jīng)講過(guò)安卓自帶刷新控件沒(méi)有上拉加載需要自己自定義相關(guān)控件才能實(shí)現(xiàn)。先看下效果
xml布局如下:
上面代碼中有一個(gè)底部布局,可以自己定義就不黏貼上來(lái)了 記下來(lái)具體界面中調(diào)用給接口方法
package com.example.swiperefresh4listview;import java.util.ArrayList;import java.util.List;import java.util.Random;import com.example.swiperefresh4listview.Swiperefresh4ListView.OnLoadListener;import android.os.Bundle;import android.os.Handler;import android.support.v4.widget.SwipeRefreshLayout;import android.support.v7.app.AppCompatActivity;import android.widget.ArrayAdapter;import android.widget.ListView;import android.widget.Toast;/** * 使用谷歌提供的SwipeRefreshLayout下拉控件進(jìn)行下拉刷新和上拉加載 */public class MainActivity extends AppCompatActivity { private List<String> mList; private int mCount; private ArrayAdapter<String> mAdapter; private Swiperefresh4ListView swipeRefreshView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initUI(); reFresh(); } private void initUI() { swipeRefreshView = (Swiperefresh4ListView) findViewById(R.id.srl); ListView listView = (ListView) findViewById(R.id.lv); // 設(shè)置適配器數(shù)據(jù) mList = new ArrayList<>(); for (int i = 0; i < 30; i++) { mList.add("我是laohu" + i + "號(hào)"); mCount++; } mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mList); listView.setAdapter(mAdapter); } private void reFresh() { // 設(shè)置顏色屬性的時(shí)候一定要注意是引用了資源文件還是直接設(shè)置16進(jìn)制的顏色,因?yàn)槎际莍nt值容易搞混 // 設(shè)置下拉進(jìn)度的背景顏色,默認(rèn)就是白色的 swipeRefreshView.setProgressBackgroundColorSchemeResource(android.R.color.white); // 設(shè)置下拉進(jìn)度的主題顏色 swipeRefreshView.setColorSchemeResources(R.color.colorAccent, R.color.colorPrimary, R.color.colorPrimaryDark); // 設(shè)置刷新出現(xiàn)的位置 swipeRefreshView.setProgressViewEndTarget(false,200); // 設(shè)置向下拉多少出現(xiàn)刷新 swipeRefreshView.setDistanceToTriggerSync(30); // 下拉時(shí)觸發(fā)SwipeRefreshLayout的下拉動(dòng)畫(huà),動(dòng)畫(huà)完畢之后就會(huì)回調(diào)這個(gè)方法 swipeRefreshView.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void onRefresh() { //默認(rèn)會(huì)自動(dòng)刷新無(wú)需調(diào)用這個(gè)屬性setRefreshing(boolean d) // 這里是主線程一些比較耗時(shí)的操作,比如聯(lián)網(wǎng)獲取數(shù)據(jù),需要放到子線程去執(zhí)行 final Random random = new Random(); new Handler().postDelayed(new Runnable() { @Override public void run() {// 刷新數(shù)據(jù)在這里 mList.add(0, "我是天才" + random.nextInt(100) + "號(hào)"); mAdapter.notifyDataSetChanged(); Toast.makeText(MainActivity.this, "刷新了一條數(shù)據(jù)", Toast.LENGTH_SHORT).show(); // 加載完數(shù)據(jù)設(shè)置為不刷新?tīng)顟B(tài),將下拉進(jìn)度收起來(lái) swipeRefreshView.setRefreshing(false); } }, 1200); // 這個(gè)不能寫(xiě)在外邊,不然會(huì)直接收起來(lái) // swipeRefreshLayout.setRefreshing(false); } }); // 設(shè)置下拉加載更多 swipeRefreshView.setOnLoadListener(new OnLoadListener() { @Override public void onLoad() { // TODO Auto-generated method stub new Handler().postDelayed(new Runnable() { @Override public void run() { // 添加數(shù)據(jù) for (int i = 30; i < 35; i++) { mList.add("我是小胡" + i + "號(hào)"); // 這里要放在里面刷新,放在外面會(huì)導(dǎo)致刷新的進(jìn)度條卡住 mAdapter.notifyDataSetChanged(); } Toast.makeText(MainActivity.this, "數(shù)據(jù)加載完成", Toast.LENGTH_SHORT).show(); // 加載完數(shù)據(jù)隱藏掉上拉加載布局 swipeRefreshView.setLoading(false); } }, 1200); } }); }}思考:使用官方的下拉刷新可以實(shí)現(xiàn)自定義下拉刷新樣式嗎? 好的,上拉加載已經(jīng)實(shí)現(xiàn),后面在實(shí)際刷新過(guò)程中,發(fā)現(xiàn)一個(gè)問(wèn)題,就是下拉刷新在刷新過(guò)程中,如果下拉界面過(guò)短或者刷新顯示時(shí)常短,上拉到底部的時(shí)候,兩個(gè)會(huì)一起顯示,一個(gè)小bug,有待解決,還是第三方刷新比較好用。哪位大神看到能指導(dǎo)一二,以上代碼參考了網(wǎng)上資源,感謝各位大神分享。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注