怎样一开始打开activity就启动google的下拉刷新(仿优酷的下拉刷新)

来源:互联网 发布:威风堂堂软件下载 编辑:程序博客网 时间:2024/06/05 22:32

怎样一开始打开activity就启动google的下拉刷新(仿优酷的下拉刷新)

        因为平时一直都是使用优酷app观看视频等,然而,一直对它的一个现象不思其解,就是只要有下拉刷新的地方,一旦这个页面一启动,就会首先看到google官方推荐的下拉刷新的小圆圈在转,正在处于刷新状态。然后我以前也学过关于google下拉刷新swipRefreshLayout的使用,连接点击打开链接查看google的下拉刷新
      然而,我就使用SwipRefreshLayout的setRefreshing(true)来手动的要求swipRefreshLayout进行刷新,然而根本没有出来现象,然后我就查了下资料,这里有两种办法可以实现SwipRefreshLayout 的主动刷新功能。
 
   第一中:继承SwipRefreshLayout,自己定义一个实现主动刷新的方法,才用反射的方式来实现。代码如下:
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();        }    }}
这里自定义了一个setRefresh()方法来实现手动刷新。

 main_activity.xml:如下

<?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>

MainActivity
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);    }}

效果图如下:

        第二种:使用google原始SwipRefreshLayout实现, 值得注意的是:接调用setRfreshing(true)是出不来效果的,这个问题我以前也遇到过,必须调用
     mSwipeRefreshLayout.post(new Runnable() {            @Override            public void run() {                mSwipeRefreshLayout.setRefreshing(true);            }        });        onRefresh();


MainActivity.xml代码如下:
<?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的代码如下:

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( ) 方法 ,来实现刷新功能。

1 0
原创粉丝点击