【问题标题】:How to get a video length from a recyclerview adapter in android studio如何从 android studio 中的 recyclerview 适配器获取视频长度
【发布时间】:2021-03-17 13:23:40
【问题描述】:

我创建了一个应用程序,它可以显示手机存储中的视频。我想创建一个功能,当用户单击其中一个视频时,如果单击的视频的长度超过 5 分钟或少于 2 分钟,则会弹出一个 toast。我如何在 recyclerview 适配器中实现这一点。下面是我的 recyclerview 适配器。

Recyclerview 适配器

public class VideoAdapter extends RecyclerView.Adapter<VideoAdapter.ViewHolder> {

private Context context;
private ArrayList<VideoModel> videoModels;

public VideoAdapter(Context context, ArrayList<VideoModel> videoModels) {
this.context = context;
this.videoModels = videoModels;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.lists_of_videos, parent, false);
return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
final VideoModel vidModel = videoModels.get(position);

Glide.with(context).load(vidModel.getData()).into(holder.video_thumb);
holder.duration.setText(vidModel.getDuration());

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (vidModel.getData() != null){
            Intent intent = new Intent(context, SelectedVideoActivity.class);
            intent.putExtra("videoURL", vidModel.getId());
            context.startActivity(intent);
        }else {
            Toast.makeText(context, "Invalid video", Toast.LENGTH_SHORT).show();
        }

    }
});

}

@Override
public int getItemCount() {
return videoModels.size();
}

static class ViewHolder extends RecyclerView.ViewHolder {
ImageView video_thumb;
TextView duration;

public ViewHolder(@NonNull View itemView) {
    super(itemView);

    video_thumb = itemView.findViewById(R.id.video_thumb);
    duration = itemView.findViewById(R.id.duration);

}
}

视频模型类

public class VideoModel{

     long id;
     Uri data; 
     String duration;

    public VideoModel(long id,  Uri data, String duration){
    this.id = id; 
    this.data = data; 
    this.duration = duration;
    }

    public long getId(){
    return id;
   }

    public void setId(long id){
    this.id= id; 
    }
   public Uri getData(){
   return data;
    }

   public void setData(Uri data){
   this.data= data; 
   }

    public String getDuration(){
    return duration:
   }

    public void setDuration(String duration){
    this.duration=duration; 
  }

  }

【问题讨论】:

  • 我猜这取决于值vidModel.getDuration() .. 你保存在哪个单位? ..我认为你只需要检查这个值..也许需要一些时间转换..
  • @Zain Yah 我知道,要获得点击视频的长度,我需要调用 vidModel.getDuration(),但我不知道如何计算获取长度的数学一分钟格式的视频。
  • 这取决于您将其存储在哪个单元中vidModel
  • @Zain VideoModel类中的变量是long id;乌里数据;字符串持续时间;
  • @Zain 所以我使用 getter setter 方法来检索它们(视频的 Uri、视频的持续时间和视频的 id)

标签: java android android-studio android-recyclerview


【解决方案1】:

假设您以毫秒 (msec) 为单位保存持续时间

1 sec = 1000 msec
1 min = 60 sec
So, 1 min = 60 * 1000 = 60000 msec

然后在列表项onClick回调中像下面那样做

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (vidModel.getData() != null){
            Intent intent = new Intent(context, SelectedVideoActivity.class);
            intent.putExtra("videoURL", vidModel.getId());
            context.startActivity(intent);
            
            // Checking video duration
            
            final long ONE_MIN = 60000;
            final long FIVE_MIN = 5 * ONE_MIN;
            final long TWO_MIN = 2 * ONE_MIN;
            
            try {
                long videoDuration = Long.parseLong(vidModel.getDuration());
                
                if (videoDuration > FIVE_MIN)
                    Toast.makeText(this, "The video is longer than 5 min", Toast.LENGTH_SHORT).show();
                    
                else if (videoDuration < TWO_MIN)
                    Toast.makeText(this, "The video is less than 2 min", Toast.LENGTH_SHORT).show();

            } catch (NumberFormatException e) {
                e.printStackTrace();
            }

            
        }else {
            Toast.makeText(context, "Invalid video", Toast.LENGTH_SHORT).show();
        }

    }
});

【讨论】:

  • 我认为他会得到例外,但我不确定。希望这对他有帮助!
  • 也许因为他们没有展示他们如何使用setDuration
  • @Zain 我尝试实现该方法,但它不起作用。当一个项目被点击时,onclickListener 甚至不会被触发。
【解决方案2】:

要启动它,每 60000 等于 1 分钟。 在您的 onClick 内:

if (vidModel.getDuration() < 120000) { // 120 000 is 2 minutes
    Toast.makeText(activity, "less than 2 minutes", Toast.LENGTH_SHORT).show();
} else if (vidModel.getDuration() > 300000) { // 300 000 is 5 minutes
    Toast.makeText(activity, "more than 5 minutes", Toast.LENGTH_SHORT).show();
} else {
    Toast.makeText(activity, "This video is between 2 and 5 minutes.", Toast.LENGTH_SHORT).show();
}

【讨论】:

  • 谢谢,但是 vidModel.getDuration() 是字符串格式。
  • 哦。那不一样!我认为默认情况下您的持续时间是long
  • 一种方法是将 getDuration 方法设置为 long ,然后使用方法将其转换为 String
猜你喜欢
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2011-09-07
  • 2018-06-02
  • 2021-09-27
  • 1970-01-01
相关资源
最近更新 更多