安卓高级2 swipeReferenceLayout 使用案例 和完善其自定义上拉
2016-10-18 21:13
393 查看
swipeReferenceLayout 无法完成上来加载数据所以自定义了一个类
Activity.java
ReferenceLayout.java 自定义
布局文件:
其上拉布局
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>
相关文章推荐
- 安卓高级2 swipeReferenceLayout 使用案例 和完善其自定义上拉
- 安卓高级2 Volley框架的使用案例
- 安卓开发中实现页面越界回弹和上下拉的刷新自定义动画的操作(TwinklingRefreshLayout布局的使用)
- 安卓高级3 RecyclerView 和cardView使用案例
- 安卓高级2 Volley框架的使用案例
- 安卓高级3 RecyclerView 和cardView使用案例
- 安卓高级8 SurfaceView案例二 自定义相机
- 安卓高级8 SurfaceView案例二 自定义相机
- 安卓使用GridView点击背景为黄色,自定义Gridview背景色
- jQquery.validate自定义规则的使用案例
- 006.高级控件的使用(基础--案例)
- 【Android高级】安卓各种动画使用方法详解
- 安卓 layout_gravity 使用时注意
- jQuery.Validate自定义规程的使用案例
- logback高级特性使用(二) 自定义Pattern模板
- iOS6新特征:UICollectionView高级使用示例之CircleLayout
- iOS 自定义UITabBarView使用方法(欢迎提建议和补充完善)
- iOS6新特征:UICollectionView高级使用示例之CircleLayout
- 安卓开发:弹出自定义对话框自动播放视频(仿视频广告效果,使用mediaplayer和surfaceview做播放器)
- iOS6新特征:UICollectionView高级使用示例之CircleLayout