2016-03-29 8 views
3

Ich bin eine App erstellt, die einige Daten aus dem Internet heruntergeladen und zeigen sie in einer Liste mit RecyclerView.So ich SwipeRefreshLayout hinzugefügt, so dass wenn Benutzer am Anfang der Seite ist, kann er ziehen von oben nach aktualisieren (wie Facebook-App). Aber in meiner App, wenn ich scroll und wieder scrollte nach oben scrollen die SwipeRefreshLayout zeigt und aktualisieren meine Seite.Wenn ich scrolle, SwipeRefreshLayout aktualisieren meine App

Ich suche auch im Internet, kann aber nicht die richtige Antwort bekommen.

Ich versuche this Lösung, aber es funktioniert nicht mehr (Weil ich RecyclerView verwende).

Hier einige der Code meiner App für ein besseres Verständnis ...

activity_main

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

MainActivity.java

//..... 
public SwipeRefreshLayout mSwipeRefreshLayout; 

protected void onCreate(Bundle savedInstanceState) { 
//.... 
mSwipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeToRefresh); 
    mSwipeRefreshLayout.setOnRefreshListener(this); 
//...... 
} 

//....... 

@Override 
public void onRefresh() { 
    Api.getBlog(mBlogListAdapter); 
} 

Api Antwort

//....... 
@Override 
public void onResponse(Call<AllBlog> call, Response<AllBlog> response) { 
    //....... 
    mActivity.mSwipeRefreshLayout.setRefreshing(false); 
} 

Im mein Adapter

//........ 
public class BlogListViewHolder extends RecyclerView.ViewHolder implements View.OnScrollChangeListener{ 
    public ImageView mBlogImage; 
    public TextView mBlogTitle; 
    public TextView mBlogAuthor; 
    public BlogListViewHolder(View itemView) { 
     super(itemView); 
     mBlogImage = (ImageView) itemView.findViewById(R.id.blogPhoto); 
     mBlogTitle = (TextView) itemView.findViewById(R.id.blogTitle); 
     mBlogAuthor = (TextView) itemView.findViewById(R.id.blogAuthor); 
    } 
} 

Ich habe auch versucht, View.OnScrollChangeListener zu implementieren, aber es funktioniert auch nicht.

public class BlogListViewHolder extends RecyclerView.ViewHolder implements View.OnScrollChangeListener{ 
    public ImageView mBlogImage; 
    public TextView mBlogTitle; 
    public TextView mBlogAuthor; 
    public BlogListViewHolder(View itemView) { 
     super(itemView); 
     mBlogImage = (ImageView) itemView.findViewById(R.id.blogPhoto); 
     mBlogTitle = (TextView) itemView.findViewById(R.id.blogTitle); 
     mBlogAuthor = (TextView) itemView.findViewById(R.id.blogAuthor); 

     itemView.setOnScrollChangeListener(this); 
    } 

    @Override 
    public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 
     if (v.getVerticalScrollbarPosition() == 0) { 
      mActivity.mSwipeRefreshLayout.setEnabled(true); 
     } else { 
      mActivity.mSwipeRefreshLayout.setEnabled(false); 
     } 
    } 
} 
+0

Bitte schreiben Sie den Code für 'content_main.xml'. –

Antwort

4

Ich glaube, Sie SwipeRefreshLayout auf ganze Layout selbst implementiert haben. Dies ist nicht die richtige Methode zum Implementieren von SwipeRefreshLayout. Sie sollten SwipeRefreshLayout nur an Ihr RecyclerView und nicht an das gesamte Layout anpassen.

wie unten:

<android.support.v4.widget.SwipeRefreshLayout 
... 
> 
    <RecyclerView 
    ... 
    /> 
</android.support.v4.widget.SwipeRefreshLayout> 
+0

Danke man.Ich nur mein ganzes Layout in SwipeRefreshLayout.When nur recycleview wiping mit SwipeRefreshLayout das Problem gelöst –

+0

@NiyamatAlmass Froh, dass es geholfen .. Happy Coding ... !!! –

+0

@ChintanSoni bitte auch dies beantworten: http://stackoverflow.com/questions/36434071/android-support-v4-widget-swiperefreshlayout-working-but-it-is-not-visible –

1
//create interface 
    public interface YourFragmentInterface { 
    void fragmentBecameVisible(); 
    } 

//implements YourFragmentInterface 

     @Override 
     public void fragmentBecameVisible() 

     // refresh detail 
     } 
Verwandte Themen