您的位置:首页 > 编程语言 > Go语言

怎样一开始打开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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息