【问题标题】:How To Save Changes made To The Items of A list如何保存对列表项目所做的更改
【发布时间】:2020-07-20 14:19:47
【问题描述】:

我的应用显示自定义视频列表,并可选择使用 IntentService 进行下载。自定义列表使用 recyclerView 系统显示在 UI 上。以下是名单图片

单击并下载视频后,下载图标会变为蓝色,如上图所示列表的第一个子项所示,当尚未下载时,它会显示默认的黑色下载图标。我已经串起了一些代码让它工作,挑战是,当应用程序重新启动时,即使之前下载过,下载图标也会恢复到默认颜色。如何更新和保存对下载图标颜色所做的更改,以便在重新启动应用程序时反映出来?我了解 SharedPreference 类可用于保存对应用程序所做的更改,但我不知道如何实现这一点。希望能提供任何帮助来实现这一目标

下面是我的 onCreate mtd

@Override
protected void onCreate(Bundle savedInstanceState) {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lecture);
    setUpRecyclerView();

下面是我创建 setUpRecyclerView() 的地方

 private void setUpRecyclerView() {
    Query query = lectureRef.orderBy("position", Query.Direction.ASCENDING);
    FirestoreRecyclerOptions<LectureClasses> options = new FirestoreRecyclerOptions.Builder<LectureClasses>()
            .setQuery(query, LectureClasses.class).build();
    adapter = new LectureClassesAdapter(options);
    recyclerView = findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    recyclerView.setAdapter(adapter);
}

下面是我在适配器类中设置 onViewItemclick @overide 方法的调用

 @Override
public void onViewItemClick(DocumentSnapshot snapshot, int position, View itemView) {
    //init variables
    CircularProgressBar progressBarCir = itemView.findViewById(R.id.progress_circular);
    progressBarCir.setProgressMax(100f);
    ImageView downloadImage = itemView.findViewById(R.id.download);
    PopupMenu popupMenu = new PopupMenu(LectureActivity.this,downloadImage);
    LectureClasses lectureClasses = snapshot.toObject(LectureClasses.class);
    lectureClasses = adapter.getItem(position);
    String titleNow = lectureClasses.getTitle();
    String urlNow = lectureClasses.getUrl();

     class DownloadReceiver extends ResultReceiver { 

        public DownloadReceiver(Handler handler) {
            super(handler);
        }

        @Override
        protected void onReceiveResult(int resultCode, Bundle resultData) {
            super.onReceiveResult(resultCode, resultData);
            if (resultCode == TichaDownloadService.UPDATE_PROGRESS) {
                int progress = resultData.getInt("progress"); 
                progressBarCir.setProgress(progress);
                downloadImage.setVisibility(View.GONE);
                progressBarCir.setVisibility(View.VISIBLE);
                Log.i("STATUS","DOWNLOADING>>>");
                if (progress == 100) {
                   progressBarCir.setVisibility(View.GONE);
                   downloadImage.setImageDrawable(getDrawable(R.drawable.download_blue));
                   downloadImage.setVisibility(View.VISIBLE);
                }
            }else  {
                Log.i("STATUS"," NOT DOWNLOADING,BOSS");
            }
        }
    }
 }   

【问题讨论】:

  • 你在哪里保存文件(视频)??
  • @Javad Dehban,在设备的外部存储器上。不是标清
  • 到什么地址文件?
  • 我不确定我是否理解你,@Javad Dehban,但如果你指的是位置 uri,它看起来像这样 Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString()+videoFile;

标签: java android android-recyclerview android-adapter


【解决方案1】:

您可以使用以下代码检查文件

 File videoFile = new File("patch_video_file");
    if (videoFile.exists()){
        // visible button blue
    }else {
        // visible button default
    }

【讨论】:

  • 谢谢,@Javad Dehban,但是检查文件是否存在并不是这里的挑战,而是如何访问 onCreate 方法中的列表项。我知道访问 listView 项目的唯一方法是 onViewItemClick 的 @Overide ,它只能通过单击项目来工作。如果在检查文件是否存在后,如何访问下载图标?如果我有访问权限,我只能更改它的显示
  • 这是怎么插入的?(list)
  • 通过调用 setUpRecyclerView() 将列表插入到 UI 中;在onCreate 中,但子项由 onItemViewClick 覆盖访问。如我上面的代码所示
  • 您可以将参数作为 (IsExist) 添加到列表中。默认为假。然后当下载完成时,这个数量是真实的
  • 运行应用时始终检查此参数
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2020-10-29
  • 2016-10-03
  • 2013-06-23
  • 1970-01-01
相关资源
最近更新 更多