我必须每x秒更新一次RecyclerView适配器

时间:2016-12-28 07:25:02

标签: android android-recyclerview postdelayed

我从数据库中提取数据并将其显示在RecyclerView。但我必须每RecyclerView更新一次x milliseconds/seconds

这是我的代码。请帮忙。

@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);
    }
}

3 个答案:

答案 0 :(得分:0)

在适配器构造函数中,添加一个计时器来安排任务

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

答案 1 :(得分:0)

我建议您使用内置的AsyncTask

为此:

  • 允许您在后台线程上进行昂贵的工作,而不会导致UI口吃
  • 有一个onProgressUpdate回调,正好用于更新UI

答案 2 :(得分:-1)

您需要申报DownloadsAdapter全球:

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

然后

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);
}

这将每1000微秒(x时间)更新您的列表,并通知RecyclerView适配器数据发生变化。