Android - 实现像Chrome一样刷新

时间:2015-09-03 06:25:54

标签: java android google-chrome pull-to-refresh

我能够为Android应用程序找到许多pull to refresh的实现。但是,我无法找到我想要的具体信息。它已经在Google Chrome for Android中使用,但其他应用也使用相同的方式(NovaLauncher,AliExpress和其他许多应用)。

这是怎么回事: enter image description here

当您向下拉时,会显示一个小圆圈箭头。如何在我的应用程序中实现相同的功能?

3 个答案:

答案 0 :(得分:3)

试试这个。

布局XML:

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipe_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:text="@string/hello_world"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="16dp"
            android:gravity="center"/>
    </ScrollView>

</android.support.v4.widget.SwipeRefreshLayout>

MainActivity(实现SwipeRefreshLayout):

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
    swipeLayout.setOnRefreshListener(this);
    swipeLayout.setColorScheme(android.R.color.holo_blue_bright, 
            android.R.color.holo_green_light, 
            android.R.color.holo_orange_light, 
            android.R.color.holo_red_light);
}


@Override public void onRefresh() {
    new Handler().postDelayed(new Runnable() {
        @Override public void run() {
            swipeLayout.setRefreshing(false);
        }
    }, 5000);
}

有关更多信息,请查看此链接:
http://www.androidhive.info/2015/05/android-swipe-down-to-refresh-listview-tutorial/

答案 1 :(得分:3)

关于它有一个nice tutorial

基本上你需要在SwipeRefreshLayout

中放置你想要刷新的东西
 <android.support.v4.widget.SwipeRefreshLayout
        android:id="@+id/activity_main_swipe_refresh_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ListView
            android:id="@+id/activity_main_listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            >
        </ListView>

    </android.support.v4.widget.SwipeRefreshLayout>

设置适配器

class MainActivity extends Activity {

  ListView mListView;
  SwipeRefreshLayout mSwipeRefreshLayout;
  Adapter mAdapter;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.acivity_main);
    SwipeRefreshLayout mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.activity_main_swipe_refresh_layout);
    mListView = findViewById(R.id.activity_main_list_view);
 mListView.setAdapter(new ArrayAdapter<String>(){
    String[] fakeTweets = getResources().getStringArray(R.array.fake_tweets);
    mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fakeTweets)
    listView.setAdapter(mAdapter);
  });
  }
}

并附上setOnRefreshListener

@Override
  public void onCreate(Bundle savedInstanceState) {
  ...
    listView.setAdapter();
    mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
      @Override
      public void onRefresh() {
          doSomething();
  }

答案 2 :(得分:0)

我在我的xhtml页面中实现了这一点。效果很好。

<script type="text/javascript">         //<![CDATA[
         window.addEventListener('load', function() {
              var maybePreventPullToRefresh = false;
              var lastTouchY = 0;
              var touchstartHandler = function(e) {
                if (e.touches.length != 1) return;
                lastTouchY = e.touches[0].clientY;
                // Pull-to-refresh will only trigger if the scroll begins when the
                // document's Y offset is zero.
                maybePreventPullToRefresh =
                    window.pageYOffset == 0;
              }

              var touchmoveHandler = function(e) {
                var touchY = e.touches[0].clientY;
                var touchYDelta = touchY - lastTouchY;
                lastTouchY = touchY;

                if (maybePreventPullToRefresh) {
                  // To suppress pull-to-refresh it is sufficient to preventDefault the
                  // first overscrolling touchmove.
                  maybePreventPullToRefresh = false;
                  if (touchYDelta > 0) {
                    e.preventDefault();
                    return;
                  }
                }
              }

              document.addEventListener('touchstart', touchstartHandler, false);
              document.addEventListener('touchmove', touchmoveHandler, false);      });
                //]]>    </script>