8

Avant la mise en œuvre du Swipe d'actualiser la vue, la vue recycleur fonctionnait sans problème, mais pas à chaque fois que je tente de faire défiler la vue recycleur vers le bas le balayez pour rafraîchir interfère et empêche la mouvement de défilement.vue recycleur ne défile pas correctement après la mise en œuvre balayez pour rafraîchir la mise en page

Voici la capture d'écran de la question:

(Notez le balayez pour rafraîchir la mise en page vient alors que la vue recycleur défile vers le bas)

enter image description here

Voici mon fragment de mise en page:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SwipeRefreshLayout 
    android:id="@+id/activity_main_swipe_refresh_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:wheel="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <android.support.v7.widget.RecyclerView 
     android:id="@+id/availableTaskRecyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical" /> 
    <RelativeLayout 
     android:id="@+id/progress_wheel" 
     android:visibility="gone" 
     tools:visibility="visible" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_horizontal|center_vertical" 
     android:background="@color/transparentLoaderBackground"> 

     <com.pnikosis.materialishprogress.ProgressWheel 
      android:layout_width="50dp" 
      android:layout_height="50dp" 
      wheel:matProg_barColor="@color/white" 
      wheel:matProg_barWidth="1dp" 
      wheel:matProg_progressIndeterminate="true"/> 
    </RelativeLayout> 


    <RelativeLayout 
     android:id="@+id/no_available_tasks" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:visibility="gone" 
     tools:visibility = "visible" 
     > 

     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="No tasks currently available. Pull to refresh" 
      android:layout_centerInParent="true" 
      android:padding="16dp" 
      android:gravity="center_horizontal" 
      android:textSize="18sp"/> 

    </RelativeLayout> 

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

Ci-dessous le code de mon fragment:

package com.packrboy.fragments; 

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.RelativeLayout; 

import com.android.volley.AuthFailureError; 
import com.android.volley.NetworkError; 
import com.android.volley.NetworkResponse; 
import com.android.volley.NoConnectionError; 
import com.android.volley.ParseError; 
import com.android.volley.Request; 
import com.android.volley.RequestQueue; 
import com.android.volley.Response; 
import com.android.volley.ServerError; 
import com.android.volley.TimeoutError; 
import com.android.volley.VolleyError; 
import com.android.volley.toolbox.JsonObjectRequest; 
import com.avast.android.dialogs.fragment.SimpleDialogFragment; 
import com.packrboy.R; 
import com.packrboy.activities.TaskActivity; 
import com.packrboy.adapters.TaskAdapter; 
import com.packrboy.classes.SharedPreferenceClass; 
import com.packrboy.classes.Shipment; 
import com.packrboy.network.VolleySingleton; 
import com.pnikosis.materialishprogress.ProgressWheel; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.HashMap; 
import java.util.Map; 

import static com.packrboy.extras.Keys.Shipment.KEY_CREATED_AT; 
import static com.packrboy.extras.Keys.Shipment.KEY_ID; 
import static com.packrboy.extras.Keys.Shipment.KEY_IN_TRANSIT_STATUS; 
import static com.packrboy.extras.Keys.Shipment.KEY_ITEM_IMAGE; 
import static com.packrboy.extras.Keys.Shipment.KEY_ITEM_QUANTITY; 
import static com.packrboy.extras.Keys.Shipment.KEY_PICKUP_CITY; 
import static com.packrboy.extras.Keys.Shipment.KEY_PICKUP_LATITUDE; 
import static com.packrboy.extras.Keys.Shipment.KEY_PICKUP_LONGITUDE; 
import static com.packrboy.extras.Keys.Shipment.KEY_PICKUP_POSTAL_CODE; 
import static com.packrboy.extras.Keys.Shipment.KEY_PICKUP_ROUTE; 
import static com.packrboy.extras.Keys.Shipment.KEY_PICKUP_STATE; 
import static com.packrboy.extras.Keys.Shipment.KEY_PICKUP_STREET_NO; 
import static com.packrboy.extras.Keys.Shipment.KEY_SHIPMENT_ARRAY; 
import static com.packrboy.extras.urlEndPoints.KEY_ASSIGN_DELIVERY; 
import static com.packrboy.extras.urlEndPoints.KEY_ASSIGN_PICKUP; 
import static com.packrboy.extras.urlEndPoints.KEY_AVAILABLE; 
import static com.packrboy.extras.urlEndPoints.KEY_SHIPMENT_URL; 
import static com.packrboy.extras.urlEndPoints.KEY_UAT_BASE_URL_API; 
import static com.packrboy.extras.Keys.Shipment.KEY_TYPE; 
import static com.packrboy.extras.Keys.Shipment.KEY_SHIPMENT; 
import static com.packrboy.extras.Keys.ServiceKeys.KEY_ERROR_CODE; 

/** 
* Created by arindam.paaltao on 29-Jul-15. 
*/ 
public class AvailableTaskFragment extends Fragment implements TaskAdapter.ClickListener{ 
    private RecyclerView mRecyclerView; 
    private TaskAdapter mTaskAdapter; 
    private JSONArray shipmentListArray; 
    private TaskActivity activity; 
    private SharedPreferenceClass preferenceClass; 
    private ArrayList<Shipment> shipmentArrayList = new ArrayList<>(); 
    int shipmentId; 
    String userId,transitStatus,requestType,streetNo,route,city,state,postalCode,imageURL,customerName,latitude,longitude,createdTime,updatedTime,itemQuantity; 
    View layout; 
    RelativeLayout progressWheel,noAvailableTasks; 
    private SwipeRefreshLayout mSwipeRefreshLayout; 

    public AvailableTaskFragment() { 

    } 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     layout = inflater.inflate(R.layout.available_task_fragment, container, false); 

     mSwipeRefreshLayout = (SwipeRefreshLayout)layout.findViewById(R.id.activity_main_swipe_refresh_layout); 
     preferenceClass = new SharedPreferenceClass(getActivity()); 
     userId = preferenceClass.getCustomerId(); 
     progressWheel = (RelativeLayout)layout.findViewById(R.id.progress_wheel); 
     noAvailableTasks = (RelativeLayout)layout.findViewById(R.id.no_available_tasks); 
     sendJsonRequest(); 
     mRecyclerView = (RecyclerView) layout.findViewById(R.id.availableTaskRecyclerView); 
     mTaskAdapter = new TaskAdapter(getActivity(), activity); 
     mRecyclerView.setAdapter(mTaskAdapter); 
     mTaskAdapter.setClickListener(this); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
      @Override 
      public void onRefresh() { 
       sendJsonRequest(); 
      } 
     }); 


     return layout; 
    } 

    public static String getRequestUrl(){ 
     return KEY_UAT_BASE_URL_API + KEY_SHIPMENT_URL + KEY_AVAILABLE; 
    } 

    public void sendJsonRequest(){ 
     progressWheel.setVisibility(View.VISIBLE); 
     final JSONObject testObject = new JSONObject(); 
     try { 
      testObject.put("token", preferenceClass.getAccessToken()); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     RequestQueue requestQueue = VolleySingleton.getsInstance().getRequestQueue(); 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, getRequestUrl(), testObject, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject jsonObject) { 
       if (mSwipeRefreshLayout.isRefreshing()){ 
        mSwipeRefreshLayout.setRefreshing(false); 
       } 
       progressWheel.setVisibility(View.GONE); 
       Log.i("error", jsonObject.toString()); 
       Log.i("login", testObject.toString()); 
       shipmentArrayList = parseJsonResponse(jsonObject); 
       mTaskAdapter.setShipmentArrayList(shipmentArrayList); 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       if (volleyError instanceof TimeoutError || volleyError instanceof NoConnectionError) { 


       } else if (volleyError instanceof AuthFailureError) { 

        //TODO 
       } else if (volleyError instanceof ServerError) { 

        //TODO 
       } else if (volleyError instanceof NetworkError) { 

        //TODO 
       } else if (volleyError instanceof ParseError) { 

        //TODO 
       } 

      } 
     }) { 
      @Override 
      protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
       return super.parseNetworkResponse(response); 
      } 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> headers = super.getHeaders(); 

       if (headers == null 
         || headers.equals(Collections.emptyMap())) { 
        headers = new HashMap<String, String>(); 
       } 

       headers.put("Cookie", preferenceClass.getCookie()); 
       return headers; 
      } 
     }; 
     requestQueue.add(jsonObjectRequest); 
    } 

    public ArrayList<Shipment> parseJsonResponse(JSONObject response) { 

     ArrayList<Shipment> shipmentArrayList = new ArrayList<>(); 
     if (response != null && response.length() > 0) { 

      try { 
       shipmentListArray = response.getJSONArray(KEY_SHIPMENT_ARRAY); 
       if (shipmentListArray.length() == 0){ 
        if (noAvailableTasks.getVisibility() == View.GONE) 
         noAvailableTasks.setVisibility(View.VISIBLE); 
       }else { 
        if (noAvailableTasks.getVisibility() == View.VISIBLE) 
         noAvailableTasks.setVisibility(View.GONE); 

        for (int i = 0; i < shipmentListArray.length(); i++) { 
         JSONObject shipmentObject = shipmentListArray.getJSONObject(i); 
         if (shipmentObject.has(KEY_TYPE)) { 
          requestType = shipmentObject.getString(KEY_TYPE); 
          transitStatus = shipmentObject.getString(KEY_IN_TRANSIT_STATUS); 
         } 
         JSONObject shipmentDetails = new JSONObject(); 
         shipmentDetails = shipmentObject.getJSONObject(KEY_SHIPMENT); 

         streetNo = shipmentDetails.getString(KEY_PICKUP_STREET_NO); 
         route = shipmentDetails.getString(KEY_PICKUP_ROUTE); 
         city = shipmentDetails.getString(KEY_PICKUP_CITY); 
         state = shipmentDetails.getString(KEY_PICKUP_STATE); 
         postalCode = shipmentDetails.getString(KEY_PICKUP_POSTAL_CODE); 
         imageURL = shipmentDetails.getString(KEY_ITEM_IMAGE); 
         latitude = shipmentDetails.getString(KEY_PICKUP_LATITUDE); 
         longitude = shipmentDetails.getString(KEY_PICKUP_LONGITUDE); 
         createdTime = shipmentDetails.getString(KEY_CREATED_AT); 
         itemQuantity = shipmentDetails.getString(KEY_ITEM_QUANTITY); 
         shipmentId = Integer.parseInt(shipmentDetails.getString(KEY_ID)); 


         Shipment current = new Shipment(); 
         current.setImageURL(imageURL); 
         current.setCity(city); 
         current.setCreatedTime(createdTime); 
         current.setLatitude(Double.parseDouble(latitude)); 
         current.setLongitude(Double.parseDouble(longitude)); 
         current.setPostalCode(postalCode); 
         current.setState(state); 
         current.setStreetNo(streetNo); 
         current.setRoute(route); 
         current.setRequestType(requestType); 
         current.setItemQuantity(itemQuantity); 
         current.setItemId(shipmentId); 
         current.setTransitStatus(transitStatus); 

         shipmentArrayList.add(current); 

        } 
       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
     return shipmentArrayList; 
    } 


    public static String getAcceptRequestRequestUrl(){ 
     return KEY_UAT_BASE_URL_API + KEY_SHIPMENT_URL + KEY_ASSIGN_PICKUP; 
    } 

    public void sendAcceptRequestJsonRequest(){ 
     final JSONObject shipmentObject = new JSONObject(); 
     final JSONObject pendingTaskObject = new JSONObject(); 
     try { 
      shipmentObject.put("packrboy_id", userId); 
      shipmentObject.put("shipment_id", shipmentId); 
      pendingTaskObject.put("payload", shipmentObject); 
      pendingTaskObject.put("token", preferenceClass.getAccessToken()); 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     RequestQueue requestQueue = VolleySingleton.getsInstance().getRequestQueue(); 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, getAcceptRequestRequestUrl(), pendingTaskObject, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject jsonObject) { 
       Log.i("error", jsonObject.toString()); 
       Log.i("login", pendingTaskObject.toString()); 
       if (jsonObject.has(KEY_ERROR_CODE)){ 
        try { 
         String errorCode = jsonObject.getString(KEY_ERROR_CODE); 
         if (errorCode.contentEquals("200")){ 
          SimpleDialogFragment.createBuilder(getActivity(), getFragmentManager()).setTitle("Request Accepted").setMessage(R.string.pickup_request_accepted).show(); 
         } 
         else { 
          SimpleDialogFragment.createBuilder(getActivity(), getFragmentManager()).setTitle("Request cannot be accepted").setMessage(R.string.pickup_request_not_allowed).show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

       } 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       if (volleyError instanceof TimeoutError || volleyError instanceof NoConnectionError) { 


       } else if (volleyError instanceof AuthFailureError) { 

        //TODO 
       } else if (volleyError instanceof ServerError) { 

        //TODO 
       } else if (volleyError instanceof NetworkError) { 

        //TODO 
       } else if (volleyError instanceof ParseError) { 

        //TODO 
       } 

      } 
     }) { 
      @Override 
      protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
       return super.parseNetworkResponse(response); 
      } 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> headers = super.getHeaders(); 

       if (headers == null 
         || headers.equals(Collections.emptyMap())) { 
        headers = new HashMap<String, String>(); 
       } 

       headers.put("Cookie", preferenceClass.getCookie()); 
       return headers; 
      } 
     }; 
     requestQueue.add(jsonObjectRequest); 
    } 


    public static String getAcceptDeliveryRequestRequestUrl(){ 
     return KEY_UAT_BASE_URL_API + KEY_SHIPMENT_URL + KEY_ASSIGN_DELIVERY; 
    } 

    public void sendAcceptDeliveryRequestJsonRequest(){ 
     final JSONObject shipmentObject = new JSONObject(); 
     final JSONObject pendingTaskObject = new JSONObject(); 
     try { 
      shipmentObject.put("packrboy_id", userId); 
      shipmentObject.put("shipment_id", shipmentId); 
      pendingTaskObject.put("payload", shipmentObject); 
      pendingTaskObject.put("token", preferenceClass.getAccessToken()); 


     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     RequestQueue requestQueue = VolleySingleton.getsInstance().getRequestQueue(); 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, getAcceptDeliveryRequestRequestUrl(), pendingTaskObject, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject jsonObject) { 
       Log.i("error", jsonObject.toString()); 
       Log.i("login", pendingTaskObject.toString()); 
       if (jsonObject.has(KEY_ERROR_CODE)){ 
        try { 
         String errorCode = jsonObject.getString(KEY_ERROR_CODE); 
         if (errorCode.contentEquals("200")){ 
          SimpleDialogFragment.createBuilder(getActivity(), getFragmentManager()).setTitle("Request Accepted").setMessage("Delivery request has been accepted").show(); 
         } 
         else { 
          SimpleDialogFragment.createBuilder(getActivity(), getFragmentManager()).setTitle("Request cannot be accepted").setMessage("The request cannot be accepted").show(); 
         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

       } 

      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError volleyError) { 
       if (volleyError instanceof TimeoutError || volleyError instanceof NoConnectionError) { 


       } else if (volleyError instanceof AuthFailureError) { 

        //TODO 
       } else if (volleyError instanceof ServerError) { 

        //TODO 
       } else if (volleyError instanceof NetworkError) { 

        //TODO 
       } else if (volleyError instanceof ParseError) { 

        //TODO 
       } 

      } 
     }) { 
      @Override 
      protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) { 
       return super.parseNetworkResponse(response); 
      } 

      @Override 
      public Map<String, String> getHeaders() throws AuthFailureError { 
       Map<String, String> headers = super.getHeaders(); 

       if (headers == null 
         || headers.equals(Collections.emptyMap())) { 
        headers = new HashMap<String, String>(); 
       } 

       headers.put("Cookie", preferenceClass.getCookie()); 
       return headers; 
      } 
     }; 
     requestQueue.add(jsonObjectRequest); 
    } 














    @Override 
    public void itemClicked(View view, int position) { 
     shipmentId = shipmentArrayList.get(position).getItemId(); 
     if (shipmentArrayList.get(position).getRequestType().contentEquals("pickup")){ 
     sendAcceptRequestJsonRequest();} 

     else{ 
      sendAcceptDeliveryRequestJsonRequest(); 
     } 



    } 
} 

J'ai également implémenté la disposition du coordinateur dans la structure d'activité. Voici le code:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <include 
      layout="@layout/toolbar" 
      android:id="@+id/toolbar"/> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/sliding_tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="scrollable" 
      app:tabGravity="fill" /> 
    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
</android.support.design.widget.CoordinatorLayout> 

Pouvez-vous m'aider à résoudre ce problème. Ce sera d'une grande aide. Merci d'avance.

+0

Cela ne fonctionne pas pour moi, dans Fragments. J'ai essayé votre solution. Je l'utilise dans un appareil réel. API 19 – RoCk

Répondre

7

Je me suis finalement il analysé les causes.

Le problème réside dans la mise en page XML elle-même. La vue Recycleur doit être un élément enfant unique dans une disposition SwipeToReferesh.

Le fichier de mise en page doit être la suivante:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:wheel="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 


    <android.support.v4.widget.SwipeRefreshLayout 
     android:id="@+id/activity_main_swipe_refresh_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 


     <android.support.v7.widget.RecyclerView 
      android:id="@+id/completedTaskRecyclerView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:scrollbars="vertical" /> 

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

    <com.pnikosis.materialishprogress.ProgressWheel 
     android:id="@+id/progress_wheel" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:visibility="gone" 
     tools:visibility="visible" 
     wheel:matProg_barColor="@color/colorAccent" 
     wheel:matProg_barWidth="1dp" 
     wheel:matProg_progressIndeterminate="true" /> 


    <TextView 
     android:id="@+id/no_available_tasks" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:gravity="center_horizontal|center_vertical" 
     android:padding="16dp" 
     android:text="No tasks currently available. Pull to refresh" 
     android:textSize="18sp" 
     android:visibility="gone" 
     tools:visibility="visible" /> 
</RelativeLayout> 

Pas besoin d'ajouter d'autres classes utilitaires ou remplacer la méthode canChildScrollUp() de SwipeToRefesh.

3

Ceci est un problème connu et je me demande pourquoi cela n'a pas déjà été résolu. Le problème ici est que SwipeRefreshLayout suppose toujours que la liste ne peut plus défiler vers le haut.

Une solution consiste à étendre SwipeRefreshLayout et remplacer canChildScrollUp(). Cette méthode est appelée lorsque vous commencez à défiler et retourner false ici lorsque la liste n'est pas à sa position supérieure devrait faire l'affaire.

Ensuite, utilisez cette méthode utilitaire pour déterminer si oui ou non votre RecyclerView peut faire défiler davantage vers le haut:

/** 
* Returns whether or not a View can scroll vertically any further. 
* @param downwardScroll The direction to check for. Pass true for downwards and 
*      false for upward. Note that downward scroll == upward swipe 
* */ 
public static boolean canScrollVerticallyAnyFurther(View view, boolean downwardScroll){ 
    return view.canScrollVertically(downwardScroll ? +1 : -1); 
} 
+0

Je n'ai pas compris comment implémenter la méthode utilitaire. J'ai essayé mais ça n'a pas marché. LinearLayoutManager layoutManager = nouveau LinearLayoutManager (getActivity()); mRecyclerView.setLayoutManager (layoutManager); if (layoutManager.findFirstCompletelyVisibleItemPosition()! = 0) { canScrollVerticallyAnyFurther (layout, true); } –

+1

Cette méthode peut également fonctionner, mais ma solution est générique et fonctionnera avec toutes les vues défilantes. – Saket

+0

Et quelle partie de ma réponse n'avez-vous pas comprise? Je vais essayer de le rendre plus clair – Saket

0

j'ai réussi à mettre en œuvre balayez vers le bas pour rafraîchir et scrolling infini. Si quelqu'un est intéressé vérifier out.You peut voir la mise en œuvre de ce à

https://github.com/snijsure/TwitterSample

Bien que du point de vue UX Je ne suis pas sûr que le soutien SwipeDown à rafraîchir ainsi que l'actualisation sur la fin de défilement, est une bonne idée, il pourrait être déroutant pour l'utilisateur final.

À la votre!