怎样一开始打开activity就启动google的下拉刷新(仿优酷的下拉刷新)
2016-06-30 20:49
447 查看
怎样一开始打开activity就启动google的下拉刷新(仿优酷的下拉刷新)
[align=left] 因为平时一直都是使用优酷app观看视频等,然而,一直对它的一个现象不思其解,就是只要有下拉刷新的地方,一旦这个页面一启动,就会首先看到google官方推荐的下拉刷新的小圆圈在转,正在处于刷新状态。然后我以前也学过关于google下拉刷新swipRefreshLayout的使用,连接点击打开链接查看google的下拉刷新[/align][align=left] 然而,我就使用SwipRefreshLayout的setRefreshing(true)来手动的要求swipRefreshLayout进行刷新,然而根本没有出来现象,然后我就查了下资料,这里有两种办法可以实现SwipRefreshLayout 的主动刷新功能。[/align]
[align=left] [/align]
[align=left] 第一中:继承SwipRefreshLayout,自己定义一个实现主动刷新的方法,才用反射的方式来实现。代码如下:[/align]
package com.world.hello.swiperefrsh; import android.content.Context; import android.support.v4.widget.SwipeRefreshLayout; import android.util.AttributeSet; import android.view.View; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * google下拉刷新设置为可以主动刷新 * Created by chengguo on 2016/6/30. */ public class MineSwipeRefreshLayout extends SwipeRefreshLayout { public MineSwipeRefreshLayout(Context context) { super(context); } public MineSwipeRefreshLayout(Context context, AttributeSet attrs) { super(context, attrs); } /** * 主动刷新 */ public void setRefresh() { try { Field mCircleView = SwipeRefreshLayout.class.getDeclaredField("mCircleView"); mCircleView.setAccessible(true); View progress = (View) mCircleView.get(this); progress.setVisibility(VISIBLE); Method setRefreshing = SwipeRefreshLayout.class.getDeclaredMethod("setRefreshing", boolean.class, boolean.class); setRefreshing.setAccessible(true); setRefreshing.invoke(this, true, true); } catch (Exception e) { e.printStackTrace(); } } }
[align=left]这里自定义了一个setRefresh()方法来实现手动刷新。[/align]
[align=left]
[/align]
[align=left] main_activity.xml:如下[/align]
[align=left]
[/align]
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rootView" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.world.hello.swiperefrsh.MineSwipeRefreshLayout android:id="@+id/swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/home_list" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" /> </com.world.hello.swiperefrsh.MineSwipeRefreshLayout> </LinearLayout>
[align=left]
[/align]
[align=left]MainActivity[/align]
package com.world.hello.swiperefrsh; import android.os.Bundle; import android.os.Handler; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener{ private MineSwipeRefreshLayout mSwipeRefreshLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSwipeRefreshLayout = (MineSwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); mSwipeRefreshLayout.setOnRefreshListener(this); //主动刷新,界面刚开始出现时就能看到google的下拉刷新图标,这个时候就调用了google的刷新方法 //onRefresh()方法。 mSwipeRefreshLayout.setRefresh(); } /** * google官方的下拉刷新回调方法 */ @Override public void onRefresh() { Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // 让listview停止刷新 mSwipeRefreshLayout.setRefreshing(false); Toast.makeText(MainActivity.this, "刷新成功", Toast.LENGTH_SHORT).show(); } }, 2000); } }
[align=left]效果图如下:[/align]
[align=left]
[/align]
[align=left] 第二种:使用google原始SwipRefreshLayout实现, 值得注意的是:接调用setRfreshing(true)是出不来效果的,这个问题我以前也遇到过,必须调用[/align]
mSwipeRefreshLayout.post(new Runnable() { @Override public void run() { mSwipeRefreshLayout.setRefreshing(true); } }); onRefresh();
[align=left]
[/align]
[align=left]MainActivity.xml代码如下:[/align]
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/rootView" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@+id/home_list" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" /> </android.support.v4.widget.SwipeRefreshLayout> </LinearLayout>
MainAcitivity的代码如下:
[align=left]
[/align]
package com.world.hello.swiperefrsh; import android.os.Bundle; import android.os.Handler; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; public class MainActivity extends AppCompatActivity implements SwipeRefreshLayout.OnRefreshListener { private SwipeRefreshLayout mSwipeRefreshLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout); mSwipeRefreshLayout.setOnRefreshListener(this); mSwipeRefreshLayout.post(new Runnable() { @Override public void run() { mSwipeRefreshLayout.setRefreshing(true); } }); onRefresh(); } /** * google官方的下拉刷新回调方法 */ @Override public void onRefresh() { Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // 让listview停止刷新 mSwipeRefreshLayout.setRefreshing(false); Toast.makeText(MainActivity.this, "刷新成功", Toast.LENGTH_SHORT).show(); } }, 2000); } }
现象和第一种方法的现象是一样的,这样是用代码主动去调用SwipRefreshLayout的回调方法 onRefresh( ) 方法 ,来实现刷新功能。
[align=left]
[/align]
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories