java - 定期更新 RecyclerView 上的项目

标签 java android android-recyclerview auto-update

我有一个带有回收器 View 处理卡片的 Activity 。我有一个 SwipeRefreshLayout,所以当我滑动它时,它会用新内容更新 RecyclerView。到目前为止,一切都很好。

但是,我想每 X 秒更新一次 RecyclerView,因此,例如,如果我在打开 recyclerview 的情况下离开 Activity,而我忘记了滑动它,那么它也会自行更新。 为此,我想了这样的事情: (我省略了必要的代码)。

我的主要 Activity 包含 recyclerview 安排这样的作业:

private void scheduleJob() {

    ComponentName serviceName = new ComponentName(this, MyJobService.class);
    JobInfo jobInfo = new JobInfo.Builder(JOB_ID, serviceName)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
            .setRequiresDeviceIdle(false)
            .setRequiresCharging(false)
            .setPeriodic(3000)
            //.setOverrideDeadline(400) // Remove comment for faster testing.
            .build();

    JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
    int result = scheduler.schedule(jobInfo);

    if (result == JobScheduler.RESULT_SUCCESS) {
        Toast.makeText(this,"Start", Toast.LENGTH_LONG).show();
    } } }

在 MyJobService 中,我通过广播到我的 Activity,让它知道它必须更新 RecylcerView 的内容。 负责接收广播的是一个像这样的内部类:

public static class MyReceiver extends BroadcastReceiver{


    @Override
    public void onReceive(Context context, Intent intent) {

        DataSource dataSource = new DataSource(context);
        items = dataSource.getItems(); // can't do this due to outter class variable
    adapter.refresh(ítems); // can't do this due to outter class variable
        Toast.makeText(context,"event",Toast.LENGTH_SHORT).show();

    }
}

问题出在我的主要 Activity 上,我持有两个名为 items (即 ArrayList )和适配器(这是 recyclerview 的适配器)的私有(private)变量,我将项目传递给适配器以更新 recyclerView 内容。但是,正如我一样在静态内部类中,我无法访问外部类变量。 做这样的事情的正确方法是什么?我认为我搞砸了太多,我想一定有一种最简单、更直接的方法来完成我想要的。

非常感谢

最佳答案

好吧,事实证明我把事情搞得太复杂了。它可以通过一个简单的处理程序来完成,如下所示:

  // Create the Handler object (on the main thread by default)
    Handler handler = new Handler();
    // Define the code block to be executed
    private Runnable runnableCode = new Runnable() {
        @Override
        public void run() {
            // Do something here on the main thread
            Toast.makeText(getApplicationContext(),"Update",Toast.LENGTH_SHORT).show();
            ItemsDS itemsDS = new ItempsDS(getApplicationContext());
            items = itemsDS.getItems();
            adapter.clear();
            adapter.addAll(items);
            handler.postDelayed(runnableCode, 1000);
        }
    };

关于java - 定期更新 RecyclerView 上的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34042847/

相关文章:

android - 是否可以在没有动画的情况下在 MotionLayout 中设置结束状态?

android - DiffUtil.calculateDiff 在 RecyclerView 中

android clipChildren 不工作角半径形状

java - 通过for循环用url链接填充字符串数组

Java 和 PHP POST 请求不起作用

java - ResultSet——它是什么样的对象?

android - 如何在同步的两个 View 之间实现android中的滑入和滑出动画

android - 回收站 View 未显示

java - 此 JAVA MySQL JDBC Google App Engine 连接字符串有效吗?

java - 在迭代时修改 Java ArrayList