【问题标题】:How to remove songs which has 0 duration in cursor in android如何在android中删除光标中持续时间为0的歌曲
【发布时间】:2023-03-24 09:43:01
【问题描述】:

我正在创建音乐应用。我使用光标在列表视图中显示歌曲。我不知道如何从光标中删除持续时间为 0 的歌曲。

这是我在列表视图中显示所有歌曲的代码。

    public MediaCursorAdapter(Context context, int layout, Cursor c) {
        super(context, layout, c,
                new String[]{MediaStore.MediaColumns.DISPLAY_NAME, MediaStore.MediaColumns.TITLE, MediaStore.Audio.AudioColumns.DURATION},
                new int[]{R.id.displayname, R.id.title, R.id.duration});
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView title = (TextView) view.findViewById(R.id.title);
        TextView name = (TextView) view.findViewById(R.id.displayname);
        TextView duration = (TextView) view.findViewById(R.id.duration);

        long durationInMs = Long.parseLong(cursor.getString(
                cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DURATION)));

        name.setText(cursor.getString(
                    cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME)));

        title.setText(cursor.getString(
                    cursor.getColumnIndex(MediaStore.MediaColumns.TITLE)));


        Duration d = new Duration();

        String durationInMin = d.convertDuration(durationInMs);

        duration.setText("" + durationInMin);

        view.setTag(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA)));
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View v = inflater.inflate(R.layout.listitem, parent, false);

        bindView(v, context, cursor);

        return v;
    }

【问题讨论】:

  • 适配器并不是真正删除项目的地方(你不能真正“删除”光标的行)。如果您首先用于检索 Cursor 的查询包含一个 WHERE 子句,该子句排除持续时间
  • 非常感谢先生。它奏效了。
  • 非常感谢先生。它奏效了。

标签: android listview duration android-cursor


【解决方案1】:

可以通过在 contentResolver.query 方法中添加 where 子句(我的代码中的 MediaStore.Audio.AudioColumns.DURATION+">0")来解决,如下所示:

cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null,MediaStore.Audio.AudioColumns.DURATION+">0", null, sortOrder);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多