2016-12-28 7 views
-1

Ich hole Daten aus der Datenbank und zeigt sie in RecyclerView. Aber ich muss die RecyclerView alle x milliseconds/seconds aktualisieren.Ich muss meinen RecyclerView Adapter für alle x Sekunden aktualisieren

Hier ist mein Code. Bitte helfen Sie.

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    View view = inflater.inflate(R.layout.fragment_download, container, false); 

    rvLatestTrack = (RecyclerView) view.findViewById(R.id.recyclerview); 
    linearLayoutEmpty = (LinearLayout) view.findViewById(R.id.linearLayoutEmpty); 

    arrayList = new ArrayList<>(); 
    rvLatestTrack.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); 
    getData(); 
    return view; 
} 
public void getData() { 
    Database database = new Database(getContext()); 
    SQLiteDatabase sqLiteDatabase = database.getWritableDatabase(); 
    String SELECT_DATA_QUERY = "SELECT * FROM " + DB_Const.TABLE_NAME_SONGS; 
    Cursor cursor = sqLiteDatabase.rawQuery(SELECT_DATA_QUERY, null); 
    if (cursor.getCount() != 0) { 
     if (cursor.moveToFirst()) { 
      DownloadsModel downloadsModel; 
      do { 
       String fileName = cursor.getString(cursor.getColumnIndex(DB_Const.SONG_TITLE)); 
       String Download_percentage = cursor.getString(cursor.getColumnIndex(DB_Const.Completed_percentage)); 
       String SongURL = cursor.getString(cursor.getColumnIndex(DB_Const.URL)); 
       downloadsModel = new DownloadsModel(fileName, Download_percentage, SongURL); 
       arrayList.add(downloadsModel); 
      } while (cursor.moveToNext()); 
      rvLatestTrack.setAdapter(new DownloadsAdaptor(getContext(), arrayList)); 
     } 
     cursor.close(); 
    } else { 
     linearLayoutEmpty.setVisibility(View.VISIBLE); 
    } 
} 

Antwort

-1

Sie müssen erklären, um Ihre DownloadsAdapter global:

DownloadsAdapter adapter = new DownloadsAdaptor(getContext(), arrayList) 

und dann

private void update() { 
    Handler handler = new Handler(); 
    handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     arrayList = ... 
     adapter.notifyDataSetChanged(); //or notifyItemInserted or notifyItemRemoved as per your need. 
     update(); // recursive call 
    } 
    }, 1000); 
} 

Dies wird Ihre Liste alle 1000 Mikrosekunden (x Zeit) und benachrichtigen den RecyclerView Adapter eines aktualisieren Ändern Sie die Daten.

+0

dies tun nur einmal – Thinsky

+0

Haben Sie nicht bekommen? –

+0

Nicht das Problem gelöst –

0

In Adapter Konstruktor, fügen Sie einen Timer Aufgabe

TimerTask task = new TimerTask() { 
      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         getData(); 
        } 
       }); 
      } 
     }; 
new Timer().schedule(task, 0, 3000); 
+0

Es ist nicht mein Problem gelöst –

0

Ich empfehle Ihnen, die AsyncTask

für das in-built verwenden zu planen:

  • können Sie sich auf eine teure Arbeit tun Hintergrund-Thread ohne UI stottern
  • hat einen onProgressUpdate Rückruf genau für die Aktualisierung der UI
Verwandte Themen