zoukankan      html  css  js  c++  java
  • 安卓高级2 swipeReferenceLayout 使用案例 和完善其自定义上拉

    swipeReferenceLayout 无法完成上来加载数据所以自定义了一个类

    Activity.java

    package qianfeng.com.swipelayoutdemo;
    
    import android.graphics.Color;
    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 android.widget.ListView;
    import android.widget.Toast;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
    
        private SwipeRefreshLayout swipeRefreshLayout;
        private List<String> list = new ArrayList<>();
        private ListView listView;
        private ReferenceLayout referenceLayout;
        private ListView referenceListView;
        private ArrayAdapter<String> adapter;
        private List<String> total = new ArrayList<>();
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case 100:
                        adapter.notifyDataSetChanged();
                        referenceLayout.setRefreshing(false);
                        break;
                    case 200:
                        adapter.notifyDataSetChanged();
                        referenceLayout.setLoadingState(false);
                        break;
                }
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            referenceListView = (ListView) findViewById(R.id.referenceListView);
            adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, total);
            referenceListView.setAdapter(adapter);
    
    
            referenceLayout = (ReferenceLayout) findViewById(R.id.referenceLayout);
            referenceLayout.setColorSchemeColors(Color.RED, Color.BLACK);
            referenceLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    // 下拉刷新的监听器
                    total.clear();
                    initData(100);
    
    
                }
            });
            referenceLayout.setOnLoadingListener(new ReferenceLayout.OnLoadingListener() {
                @Override
                public void onLoading() {
                    //上拉加载更多的监听器
    
                    initData(200);
    
    
                }
            });
    
            initData(100);
            adapter.notifyDataSetChanged();
    
        }
    
        private void initData(final int what) {
            new Thread() {
                @Override
                public void run() {
                    super.run();
                    try {
                        Thread.sleep(3000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    for (int i = 0; i < 20; i++) {
                        total.add("景田" + i);
                    }
                    handler.sendEmptyMessage(what);
                }
            }.start();
    
        }
    
        // 默认 swipeReferenceLayout 的用法
        public void defaultView() {
    
            swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeLayout);
            listView = (ListView) findViewById(R.id.listView);
            // 设置颜色
            swipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW);
            for (int i = 0; i < 5; i++) {
                list.add("xixi" + i);
            }
            ArrayAdapter adapte = new ArrayAdapter(this, android.R.layout.simple_list_item_1, list);
            listView.setAdapter(adapte);
    
            swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    Toast.makeText(MainActivity.this, "hahahah", Toast.LENGTH_SHORT).show();
    
                    //    刷新完成后   将刷新的View 隐藏掉
    //                swipeRefreshLayout.setRefreshing(false);
    
                }
            });
    
        }
    }
    

    ReferenceLayout.java 自定义

    package qianfeng.com.swipelayoutdemo;
    
    import android.content.Context;
    import android.support.v4.widget.SwipeRefreshLayout;
    import android.util.AttributeSet;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.AbsListView;
    import android.widget.ListView;
    
    /**
     * Created by ${Mr.Zhao} on 2016/10/18.
     */
    public class ReferenceLayout extends SwipeRefreshLayout implements AbsListView.OnScrollListener {
    
        //2. 实例化接口对象
        private OnLoadingListener listener;
        private View footerView;
        private ListView mListView;
        private boolean isLoading = false;
    
        //1. 定义 一个接口
        public interface OnLoadingListener {
            public void onLoading();
        }
    
        //3. 提供设置监听器的方法
        public void setOnLoadingListener(OnLoadingListener listener) {
            this.listener = listener;
        }
    
    
        //  4.  构造布局
        public ReferenceLayout(Context context) {
            super(context);
            initFooterView(context);
        }
    
        public ReferenceLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            initFooterView(context);
        }
    
        // 实例化 一个  加载更多的时候的 底布局
        private void initFooterView(Context context) {
            footerView = LayoutInflater.from(context).inflate(R.layout.footer_layout, null);
        }
    
    
        // 6   创建一个方法  用来  添加或者移除 footerView
        public void setLoadingState(boolean state) {
            isLoading = state;
            if (state) {
                mListView.addFooterView(footerView);
            } else {
                mListView.removeFooterView(footerView);
            }
        }
    
        @Override
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            super.onLayout(changed, left, top, right, bottom);
            //  5. 获取   ListView
            int childCount = getChildCount();
            if (childCount > 0) {
                for (int i = 0; i < childCount; i++) {
                    View view = getChildAt(i);
                    if (view instanceof ListView) {
                        mListView = (ListView) view;
                        mListView.setOnScrollListener(this);
                    }
                }
            }
        }
    
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
    
        }
    
        // 7   判断ListView 滑动到了 底部
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            if (firstVisibleItem + visibleItemCount == totalItemCount && !isLoading) {
                setLoadingState(true);
                listener.onLoading();
            }
        }
    }

    布局文件:

    <?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"
    
        tools:context="qianfeng.com.swipelayoutdemo.MainActivity">
    
        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipeLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone">
    
            <ListView
                android:id="@+id/listView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"></ListView>
        </android.support.v4.widget.SwipeRefreshLayout>
    
        <qianfeng.com.swipelayoutdemo.ReferenceLayout
            android:id="@+id/referenceLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <ListView
                android:id="@+id/referenceListView"
                android:layout_width="match_parent"
                android:layout_height="match_parent"></ListView>
    
        </qianfeng.com.swipelayoutdemo.ReferenceLayout>
    </RelativeLayout>
    

    其上拉布局

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/footer_tv"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="加载更多"
            android:textSize="20sp" />
    </LinearLayout>
  • 相关阅读:
    TVM量化代码解析
    如何在 GPU 上优化卷积
    全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
    全文翻译(四) TVM An Automated End-to-End Optimizing Compiler
    全文翻译(三) TVM An Automated End-to-End Optimizing Compiler
    全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
    全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
    pytorch使用gpu加速的方法
    springboot的实践1
    带你玩转stackOverflow-3
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152144.html
Copyright © 2011-2022 走看看