2016-09-09 3 views
1

Ich habe RecyclerView und einige Ansichten drin. Sie werden jede Sekunde aktualisiert. Das Problem ist, dass der Bildschirm jede Sekunde nach oben scrollt (auffrischt), während der Benutzer nach unten scrollt. Wie kann ich die Position nach dem Datenupdate halten? Dies ist mein Code:Wie kann der Bildschirm beim Aktualisieren der Daten im RecyclerViewAdapter angehalten werden?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    recyclerView = (RecyclerView)findViewById(R.id.mainRecyclerView); 
    layoutManager = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(layoutManager); 
    initializeData(); 
    adapter = new RecyclerViewAdapter(offers); 
    startCount(); 

} 
private void startCount(){ 
    final Handler handler = new Handler(); 
    Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      updateData(); 
      handler.postDelayed(this, 1000); 

     } 
    }; 
    handler.postDelayed(runnable, 1000); 


} 
private void initializeData(){ 
    offers = new ArrayList<>(); 
    seconds = new ArrayList<>(); 
    seconds.add(600); 
    seconds.add(10); 
    seconds.add(20); 
    offers.add(new Offer(seconds.get(0), R.drawable.zdj, 200)); 
    offers.add(new Offer(seconds.get(1), R.drawable.zdj)); 
    offers.add(new Offer(seconds.get(2), R.drawable.zdj)); 

} 


private void updateData(){ 
    int i = 0; 
    int tempSec; 
    for(int j = 0; j < seconds.size();j++){ 

     tempSec = seconds.get(j); 
     if(tempSec==0){ 
      offers.remove(j); 
      seconds.remove(j); 
      break; 
     } 
     tempSec--; 
     seconds.set(j, tempSec); 
     offers.set(j, new Offer(seconds.get(j), R.drawable.zdj)); 
    } 
    initializeAdapter(); 
} 
private void initializeAdapter() { 

    adapter.notifyItemChanged(offers.size()); 
    recyclerView.setAdapter(adapter); 
} 
+0

Warum möchten Sie den Bildlauf stoppen, wenn Sie mit Threads spielen können? Verwenden Sie einen parallelen Thread mit dem Hauptthread zum Laden von Daten in der Recycleransicht. –

Antwort

0

Sie müssen die bestimmte Zeile von RecyclerView aktualisieren. Bitte verwenden Sie eines unten außer Kraft gesetzt Methode wie pro Ihre Anforderung,

notifyItemChanged(int position, Object payload) 

notifyItemChanged(int position) 

Sie können auch die besondere Position, die Position, die Sie anzeigen möchten.

Verwandte Themen