1

I have a recyclerView to display all the recorded audio files. All the information of the audio files including fileName, fileLength, etc. are put into a cardView and then display them to the screen using an adapter.

My problem is now all the recorded audio files are displayed. What should I do to display only some specific audio files? For example, now I have all the audio files recorded, but I only want to display audio files with name = "hello" and hide the others. How should I achieve this? Someone told me I can add an ArrayList to filter the recorded audios, but I have no idea or in which class that I have to make it. Many thanks if someone can help.

I have a RecordingItem.class to store the audio details:

public class RecordingItem implements Parcelable {
  private String mName; 
  private String mFilePath; 
  private int mId; 
  private int mLength; 
  private long mTime; 
                       ...
  }

And the adapter is called as follow:

    RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    mRecyclerView.setHasFixedSize(true);
    LinearLayoutManager llm = new LinearLayoutManager(this);
    llm.setOrientation(LinearLayoutManager.VERTICAL);

    //newest to oldest order (database stores from oldest to newest)
    llm.setReverseLayout(true);
    llm.setStackFromEnd(true);

    mRecyclerView.setLayoutManager(llm);
    mRecyclerView.setItemAnimator(new DefaultItemAnimator());

    mFileViewerAdapter = new FileViewerAdapter(this, llm);
    mRecyclerView.setAdapter(mFileViewerAdapter);

This is the adapter class:

public class FileViewerAdapter extends RecyclerView.Adapter<FileViewerAdapter.RecordingsViewHolder>
    implements OnDatabaseChangedListener {

private static final String LOG_TAG = "FileViewerAdapter";

private DBHelper mDatabase;

RecordingItem item;
Context mContext;
LinearLayoutManager llm;


public FileViewerAdapter(Context context, LinearLayoutManager linearLayoutManager) {
    super();
    mContext = context;
    mDatabase = new DBHelper(mContext);
    mDatabase.setOnDatabaseChangedListener(this);
    llm = linearLayoutManager;
}

@Override
public void onBindViewHolder(final RecordingsViewHolder holder, int position) {

    item = getItem(position);
    long itemDuration = item.getLength();

    long minutes = TimeUnit.MILLISECONDS.toMinutes(itemDuration);
    long seconds = TimeUnit.MILLISECONDS.toSeconds(itemDuration)
            - TimeUnit.MINUTES.toSeconds(minutes);

    holder.vName.setText(item.getName());
    holder.vLength.setText(String.format("%02d:%02d", minutes, seconds));
    holder.vDateAdded.setText(
            DateUtils.formatDateTime(
                    mContext,
                    item.getTime(),
                    DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NUMERIC_DATE | DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_YEAR
            )
    );

    // define an on click listener to open PlaybackFragment
    holder.cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try {
                PlaybackFragment playbackFragment =
                        new PlaybackFragment().newInstance(getItem(holder.getPosition()));

                FragmentTransaction transaction = ((FragmentActivity) mContext)
                        .getSupportFragmentManager()
                        .beginTransaction();

                playbackFragment.show(transaction, "dialog_playback");

            } catch (Exception e) {
                Log.e(LOG_TAG, "exception", e);
            }
        }
    });

    holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {

            ArrayList<String> entrys = new ArrayList<String>();
            entrys.add(mContext.getString(R.string.dialog_file_delete));

            final CharSequence[] items = entrys.toArray(new CharSequence[entrys.size()]);


            // File delete confirm
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setTitle(mContext.getString(R.string.dialog_title_options));
            builder.setItems(items, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                    if (item == 0) {
                        deleteFileDialog(holder.getPosition());
                    }
                }
            });
            builder.setCancelable(true);
            builder.setNegativeButton(mContext.getString(R.string.dialog_action_cancel),
                    new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            dialog.cancel();
                        }
                    });

            AlertDialog alert = builder.create();
            alert.show();

            return false;
        }
    });
}

@Override
public RecordingsViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemView = LayoutInflater.
            from(parent.getContext()).
            inflate(R.layout.card_view, parent, false);

    mContext = parent.getContext();

    return new RecordingsViewHolder(itemView);
}

public static class RecordingsViewHolder extends RecyclerView.ViewHolder {
    protected TextView vName;
    protected TextView vLength;
    protected TextView vDateAdded;
    protected View cardView;

    public RecordingsViewHolder(View v) {
        super(v);
        vName = (TextView) v.findViewById(R.id.file_name_text);
        vLength = (TextView) v.findViewById(R.id.file_length_text);
        vDateAdded = (TextView) v.findViewById(R.id.file_date_added_text);
        cardView = v.findViewById(R.id.card_view);
    }
}

@Override
public int getItemCount() {
    return mDatabase.getCount();
}

public RecordingItem getItem(int position) {
    return mDatabase.getItemAt(position);
}
Ken Wong
  • 25
  • 1
  • 6

0 Answers0