2016-12-23 2 views
1

https://github.com/googlesamples/android-SwipeRefreshLayoutBasicSwipe aktualisieren nur aufgerufen werden, wenn der Benutzer es klaut, nicht, wenn Benutzer Anfang der Liste erreicht

oben auf die Probe Bezug. Die Swipe-Aktualisierung ruft auf, wenn der Benutzer nach oben scrollt. Was ich will, ist Swipe-Refresh nur dann aufzurufen, wenn der Benutzer dafür besonders wischt. Die Swipe-Aktualisierung wird nicht aufgerufen, wenn der Benutzer hochscrollt und das obere Ende erreicht.

Wenn ich die lib unten verwende, bekomme ich was ich will. Aber ich habe einige Probleme mit dieser Bibliothek, also wollte ich sie nicht benutzen. github.com/baoyongzhang/android-PullRefreshLayout

Hier ist der Videoclip von dem, was ich möchte nicht: https://drive.google.com/file/d/0By2g3SV1qz5TUFdZZ1FUNmxzU1E/view?usp=sharing

+0

Haben Sie das Gerät neben nur zu lesen testen? Ich erinnere mich nicht, swipe refresh get trigger, wenn ich den Anfang der Liste erreiche. –

+0

Sir der Swipe zu aktualisieren ist Trigger auch in diesem Beispiel, wenn ich oben in dieser Liste erreichen. –

+0

Was genau versuchen Sie zu erreichen, nur um das Sample zu bearbeiten oder implementieren Sie die SwipeRefresh in Ihrem Projekt –

Antwort

0
 swipe.setOnRefreshListener(
      new SwipeRefreshLayout.OnRefreshListener() { 
       @Override 
       public void onRefresh() { 

        Toast.makeText(getContext(), "List Refreshed", Toast.LENGTH_SHORT).show(); 

        swipe.setRefreshing(false); //Refresh view Close 
       } 
      } 
    ); 
+0

Fügen Sie einfach den Swipe Refresh Layout um die Listenansicht mit einer ID hinzu und Sie können den obigen Code verwenden, um die Aktion auszuführen. Wie Sie es wünschen, funktioniert es, wenn der Benutzer streichen will. Nicht wenn der listView den oberen Rand erreicht – qwertygamer

+0

Es funktioniert nicht so, wie es sollte. Bitte überprüfen Sie den Videoclip, den ich hinzugefügt habe ... Danke –

+0

Die Eigenschaft der Swipe ist, dass es beginnt, wenn es den Anfang der Liste erreicht und Sie den Anfang der Liste erreicht haben (Quelle: Video). so wird es für eine Aktualisierung heruntergezogen. Diese gleiche Eigenschaft kann in Google Mail App angezeigt werden. – qwertygamer

1

jetzt mit dem xml beginnen

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

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

im obigen Code Es gibt eine Listview innerhalb swipeRefreshLayout, legen Sie es in das Layout Ihrer Aktivität

dann in Ihre Aktivität durch diese erklären gerade innerhalb der Aktivitätsklasse

SwipeRefreshLayout swipeRefreshLayout; 
ListView listView; 

dann innerhalb von onCreate Methode

 swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.contact_swipe_refresh); 
listView = (ListView) findViewById(R.id.contact_listView); 

setzen Sie Ihren Adapter, um den XML-Code zuweisen dann durch dies dem swiperefreshlayout zur Listenansicht und setzen onrefreshlistener

swipeRefreshLayout.setOnRefreshListener(new 

    SwipeRefreshLayout.OnRefreshListener() { 
       @Override 
       public void onRefresh() { 
        //call a method here which make a webservice call or what ever you are using to put data inside the listview then set adapter and call 

swipeRefreshLayout.setRefreshing(false); 
        } 
       } 
      }); 
+0

Ich habe die Implementierung richtig gemacht ....... bitte sehen Sie sich den Videoclip einmal an. Ich möchte nicht, dass dieser Swipe das Triggring aktualisiert, wenn ich den Anfang der Liste erreiche –

1
 listView.setOnScrollListener(new AbsListView.OnScrollListener() { 

     @Override 
     public void onScrollStateChanged(AbsListView view, int scrollState) { 
      switch (scrollState) { 
       case SCROLL_STATE_IDLE: 
        //scroll was stopped, let's show search bar again 
        break; 
       case SCROLL_STATE_TOUCH_SCROLL: 
        //user is scrolling, let's hide search bar 
        break; 
      } 
     } 
     @Override 
     public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
      if (firstVisibleItem > 0) { 
       //user scrolled down, first element is hidden 
       //you can add the swipe trigger statement anywhere 
      } 
      else {//else 
      } 
     } 
    }); 
0

Hier habe ich versucht, Ihr Problem zu lösen

activity_main.xml

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

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

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/infoText" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_marginTop="10dp" 
       android:gravity="center" 
       android:text="Pull Down to Refresh" /> 

      <ListView 
       android:id="@+id/listView" 
       android:layout_width="match_parent" 
       android:layout_height="424dp" 
       android:layout_marginTop="10dp" > 
      </ListView> 
     </LinearLayout> 

    </ScrollView> 

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

MainActivity.java

public class MainActivity extends Activity implements OnRefreshListener { 

    private SwipeRefreshLayout swipeView; 

    private ListView listView; 
    private ArrayAdapter<String> adapter; 

    private String[] LIST_ITEM_TEXT_CITIES = { "Los Angeles", "Chicago", 
      "Indianapolis", "San Francisco", "Oklahoma City", "Washington" }; 

    private String[] LIST_ITEM_TEXT_MORE_CITIES = { "Phoenix", "San Antonio", 
      "San Jose", "Nashville", "Las Vegas", "Virginia Beach" }; 

    private List<String> cityList; 

    // variable to toggle city values on refresh 
    boolean refreshToggle = true; 

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

     swipeView = (SwipeRefreshLayout) findViewById(R.id.swipe_view); 
     swipeView.setOnRefreshListener(this); 
     swipeView.setColorSchemeColors(Color.RED, Color.BLUE, Color.YELLOW, 
       Color.CYAN, Color.BLACK); 
     swipeView.setDistanceToTriggerSync(20);// in dips 
     swipeView.setSize(SwipeRefreshLayout.DEFAULT);// LARGE also can be used 

     cityList = Arrays.asList(LIST_ITEM_TEXT_CITIES); 
     listView = (ListView) findViewById(R.id.listView); 
     adapter = new ArrayAdapter<String>(getApplicationContext(), 
       R.layout.list_item, cityList); 
     listView.setAdapter(adapter); 
     listView.requestLayout(); 
    } 

    Handler handler = new Handler() { 
     public void handleMessage(android.os.Message msg) { 

      if (refreshToggle) { 
       refreshToggle = false; 
       cityList = Arrays.asList(LIST_ITEM_TEXT_MORE_CITIES); 
       adapter = new ArrayAdapter<String>(getApplicationContext(), 
         R.layout.list_item, cityList); 
      } else { 
       refreshToggle = true; 
       cityList = Arrays.asList(LIST_ITEM_TEXT_CITIES); 
       adapter = new ArrayAdapter<String>(getApplicationContext(), 
         R.layout.list_item, cityList); 
      } 
      listView.setAdapter(adapter); 

      swipeView.postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        Toast.makeText(getApplicationContext(), 
          "city list refreshed", Toast.LENGTH_SHORT).show(); 
        swipeView.setRefreshing(false); 
       } 
      }, 1000); 
     }; 
    }; 

    @Override 
    public void onRefresh() { 

     swipeView.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       swipeView.setRefreshing(true); 
       handler.sendEmptyMessage(0); 
      } 
     }, 1000); 
    } 

} 
Verwandte Themen