Android——(上下拉刷新)

1. 導入PullToRefresh
  
  1.1 修改library的build.gradle中的sdk版本(要與自己的sdk版本一樣)
      //修改前
      compileSdkVersion 16
      buildToolsVersion "27.0.3"

      defaultConfig {
        minSdkVersion 4
        targetSdkVersion 4
      }
     
      //修改後
      compileSdkVersion 27
      buildToolsVersion "27.0.3"

      defaultConfig {
        minSdkVersion 15
        targetSdkVersion 27
      }
  
  1.2 Clear Project後會報如下錯誤,修改源代碼:“PullToRefreshWebView”
      錯誤: 找不到符號
      符號:   方法 floor(float)
      位置: 類 FloatMath    

      FloatMath.floor -> Math.floor


  1.3 選中自己的工程,例如:“app”然後鼠標右鍵“open Moduel settings”導入庫

  1.4 修改layout佈局文件,添加PullToRefresh控件替換ListView即可

  


2. 第三方控件:上拉加載、下拉刷新控件
  2.1 導入第三方插件庫
      Android-PullToRefresh-master.zip

  2.2 在佈局文件中使用第三方插件
      com.handmark.pulltorefresh.library.PullToRefreshListView 
    
  2.3 自定義適配器(BaseAdapter)提供數據
      
  2.4 異步任務查詢數據(AsyncTask)
    2.4.1 AsyncTask定義了三種泛型類型 Params,Progress和Result。
          Params 啓動任務執行的輸入參數,比如HTTP請求的URL。
          Progress 後臺任務執行的百分比。
          Result 後臺執行任務最終返回的結果,比如String
    2.4.2 異步加載數據最少要重寫以下這兩個方法
          doInBackground(Params…) 後臺執行,比較耗時的操作都可以放在這裏
          onPostExecute(Result)  相當於Handler 處理UI的方式,在這裏面可以使用在doInBackground 得到的結果處理操作UI
            --注:此方法中再通知適配器和控件
            myBaseAdapter.notifyDataSetChanged();// 通知適配器數據已改變
        plv_main_plv1.onRefreshComplete();// 通知控件數據已經加載完畢
      
  2.5 給PullToRefreshListView設置相關屬性
      plv_main_1.setMode(Mode.BOTH);// 設置刷新模式
      Mode.BOTH:同時支持上拉下拉
      Mode.PULL_FROM_START:只支持下拉Pulling Down 
      Mode.PULL_FROM_END:只支持上拉Pulling Up 

      plv_main_1.getLoadingLayoutProxy().setPullLabel("上拉刷新...");// 剛下拉時,顯示的提
      plv_main_1.getLoadingLayoutProxy().setRefreshingLabel("正在載入...");// 刷新時
      plv_main_1.getLoadingLayoutProxy().setReleaseLabel("放開刷新...");// 下來達到一定距離時,顯示的提示 

package com.example.android_09;

import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;

import java.util.List;

public class MainActivity extends AppCompatActivity {

    private PullToRefreshListView lv_main_show;
    private int page=1;
    private List<Book> data = new BookDao().list(page);
    private MyBaseAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        lv_main_show = findViewById(R.id.lv_main_show);
        adapter = new MyBaseAdapter((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE));
        lv_main_show.setAdapter(adapter);

//        設置刷新模式
//        只支持上拉Pulling Up
//        Mode.BOTH:同時支持上拉下拉
//        Mode.PULL_FROM_START:只支持下拉Pulling Down
        lv_main_show.setMode(PullToRefreshBase.Mode.PULL_FROM_END);
        lv_main_show.getLoadingLayoutProxy().setPullLabel("上拉刷新...");// 剛下拉時,顯示的提
        lv_main_show.getLoadingLayoutProxy().setRefreshingLabel("正在載入...");// 刷新時
        lv_main_show.getLoadingLayoutProxy().setReleaseLabel("放開刷新...");// 下來達到一定距離時,顯示的提示
        lv_main_show.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
            @Override
            public void onRefresh(PullToRefreshBase<ListView> refreshView) {
                new MyTask().execute();
            }
        });
    }

    class MyTask extends AsyncTask{

        @Override
        protected Object doInBackground(Object[] objects) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            data.addAll(new BookDao().list(++page));
            return null;
        }

        /**
         * 回調
         * @param o
         */
        @Override
        protected void onPostExecute(Object o) {
            super.onPostExecute(o);
            adapter.notifyDataSetChanged();// 通知適配器數據已改變
            lv_main_show.onRefreshComplete();// 通知控件數據已經加載完畢
        }
    }

    class  MyBaseAdapter extends BaseAdapter{
//        佈局解析器
        private LayoutInflater inflater;

        public MyBaseAdapter(LayoutInflater inflater) {
            this.inflater = inflater;
        }

        /**
         * 像資源數量
         * @return
         */
        @Override
        public int getCount() {
            return data.size();
        }

        /**
         * 解析像資源的數據
         * @param position
         * @return
         */
        @Override
        public Object getItem(int position) {
            return data.get(position);
        }

        /**
         * 解析數據的下標
         * @param position
         * @return
         */
        @Override
        public long getItemId(int position) {
            return position;
        }

        /**
         * 解析試圖
         * @param position
         * @param convertView
         * @param parent
         * @return
         */
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            class ViewHolder{
                ImageView iv_listviewitem_image;
                TextView tv_listviewitme_title;
                TextView tv_listviewitme_author;
                TextView tv_listviewitme_price;
                TextView tv_listviewitme_publish;
                TextView tv_listviewitme_remark;
            }
            View v=convertView;
            if(v==null){
                v = inflater.inflate(R.layout.listview_item, null);
                Log.i("position",""+position);
                ViewHolder holder=new ViewHolder();
                holder.iv_listviewitem_image = v.findViewById(R.id.iv_listviewitem_image);
                holder.tv_listviewitme_title = v.findViewById(R.id.tv_listviewitme_title);
                holder.tv_listviewitme_author = v.findViewById(R.id.tv_listviewitme_author);
                holder.tv_listviewitme_price = v.findViewById(R.id.tv_listviewitme_price);
                holder.tv_listviewitme_publish = v.findViewById(R.id.tv_listviewitme_publish);
                holder.tv_listviewitme_remark = v.findViewById(R.id.tv_listviewitme_remark);
                v.setTag(holder);
            }

            ViewHolder tag = (ViewHolder) v.getTag();
            Book book = data.get(position);
            tag.iv_listviewitem_image.setImageResource(book.getImage());
            tag.tv_listviewitme_title.setText(book.getTitle());
            tag.tv_listviewitme_author.setText(book.getAuthor());
            tag.tv_listviewitme_price.setText(book.getPrice().toString());
            tag.tv_listviewitme_publish.setText(book.getPublish());
            tag.tv_listviewitme_remark.setText(book.getRemark());
            return v;
        }
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章