Recyclerviewリストとストレージからmp3アイテムを削除するにはどうすればよいですか?

Oualid Oukassou

私のアプリは内部ストレージ内のフォルダーからmp3ファイルをフェッチし、recycleviewと内部電話ストレージの両方からmp3アイテムを削除するための削除メソッドを追加する問題があり、新しいものから古いものへとアイテムを注文したいと思います。私を助けてくれてありがとうこれは私のコードです:

レコーディングクラス:

public class Recording {


String Uri, fileName;
boolean isPlaying = false;


public Recording(String uri, String fileName, boolean isPlaying) {
    Uri = uri;
    this.fileName = fileName;
    this.isPlaying = isPlaying;
}

public String getUri() {
    return Uri;
}

public String getFileName() {
    return fileName;
}

public boolean isPlaying() {
    return isPlaying;
}

public void setPlaying(boolean playing){
    this.isPlaying = playing;
}
}

これはアダプターです:

 package com.recorderlite.audio.audiorecorderlite;

  import android.content.Context;
  import android.content.DialogInterface;
 import android.media.MediaPlayer;
  import android.os.Build;
  import android.os.Handler;
 import android.support.v7.app.AlertDialog;
 import android.support.v7.widget.RecyclerView;
 import android.transition.TransitionManager;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.SeekBar;
   import android.widget.TextView;

 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;

 /**
  * Created by Oualid on 29/10/2017.
  */

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

private Context context;
private ArrayList<Recording> recordingArrayList;
private MediaPlayer mPlayer;
private boolean isPlaying = false;
private int last_index = -1;
private int adapterPosition;
  public Recording recording ;

public RecordingAdapter(Context context, ArrayList<Recording> recordingArrayList){
    this.context = context;
    this.recordingArrayList = recordingArrayList;
}

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

    View view = LayoutInflater.from(context).inflate(R.layout.recording_item_layout, parent, false);
    return new ViewHolder(view);
}

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

    setUpData(holder,position);

}

private void setUpData(ViewHolder holder, int position) {

    Recording recording = recordingArrayList.get(position);
    holder.textViewName.setText(recording.getFileName());

    if( recording.isPlaying() ){
        holder.imageViewPlay.setImageResource(R.drawable.ic_pause);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            TransitionManager.beginDelayedTransition((ViewGroup) holder.itemView);
        }
        holder.seekBar.setVisibility(View.VISIBLE);
        holder.seekUpdation(holder);
    }else{
        holder.imageViewPlay.setImageResource(R.drawable.ic_play);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            TransitionManager.beginDelayedTransition((ViewGroup) holder.itemView);
        }
        holder.seekBar.setVisibility(View.GONE);
    }

    holder.manageSeekBar(holder);

}

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

public void onClick(View view) {
    removeAt(getAdapterPosition());
}
public void removeAt(int position) {
    recordingArrayList.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, recordingArrayList.size());

    String uri = recording.getUri();
    File file = new File (uri);
    file.delete();
}

public int getAdapterPosition() {
    return adapterPosition;
}

public class ViewHolder extends RecyclerView.ViewHolder {

    ImageView imageViewPlay;
    SeekBar seekBar;
    TextView textViewName;


    private String recordingUri;
    private int lastProgress = 0;
    private Handler mHandler = new Handler();
    ViewHolder holder;

    public ViewHolder(View itemView) {
        super(itemView);
        Button btn_delete ;
        imageViewPlay = itemView.findViewById(R.id.imageViewPlay);
        seekBar = itemView.findViewById(R.id.seekBar);
        textViewName = itemView.findViewById(R.id.textViewRecordingname);

        btn_delete = itemView.findViewById(R.id.button2);
        btn_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                removeAt(getAdapterPosition());
            }
        });

        imageViewPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int position = getAdapterPosition();
                Recording recording = recordingArrayList.get(position);

                recordingUri = recording.getUri();

                if( isPlaying ){
                    stopPlaying();
                    if( position == last_index ){
                        recording.setPlaying(false);
                        stopPlaying();
                        notifyItemChanged(position);
                    }else{
                        markAllPaused();
                        recording.setPlaying(true);
                        notifyItemChanged(position);
                        startPlaying(recording,position);
                        last_index = position;
                    }

                }else {
                    if( recording.isPlaying() ){
                        recording.setPlaying(false);
                        stopPlaying();
                        Log.d("isPlayin","True");
                    }else {
                        startPlaying(recording,position);
                        recording.setPlaying(true);
                        seekBar.setMax(mPlayer.getDuration());
                        Log.d("isPlayin","False");
                    }
                    notifyItemChanged(position);
                    last_index = position;
                }

            }

        });
    }
    public void manageSeekBar(ViewHolder holder){
        holder.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                if( mPlayer!=null && fromUser ){
                    mPlayer.seekTo(progress);
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
    }

    private void markAllPaused() {
        for( int i=0; i < recordingArrayList.size(); i++ ){
            recordingArrayList.get(i).setPlaying(false);
            recordingArrayList.set(i,recordingArrayList.get(i));
        }
        notifyDataSetChanged();
    }

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            seekUpdation(holder);
        }
    };

    private void seekUpdation(ViewHolder holder) {
        this.holder = holder;
        if(mPlayer != null){
            int mCurrentPosition = mPlayer.getCurrentPosition() ;
            holder.seekBar.setMax(mPlayer.getDuration());
            holder.seekBar.setProgress(mCurrentPosition);
            lastProgress = mCurrentPosition;
        }
        mHandler.postDelayed(runnable, 100);
    }

    private void stopPlaying() {
        try{
            mPlayer.release();
        }catch (Exception e){
            e.printStackTrace();
        }
        mPlayer = null;
        isPlaying = false;
    }

    private void startPlaying(final Recording audio, final int position) {
        mPlayer = new MediaPlayer();
        try {
            mPlayer.setDataSource(recordingUri);
            mPlayer.prepare();
            mPlayer.start();
        } catch (IOException e) {
            Log.e("LOG_TAG", "prepare() failed");
        }
        //showing the pause button
        seekBar.setMax(mPlayer.getDuration());
        isPlaying = true;

        mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                audio.setPlaying(false);
                notifyItemChanged(position);
            }
        });



    }

}


//this method will remove the item from the list
private void removeHero(final int position) {
    //Creating an alert dialog to confirm the deletion
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Are you sure you want to delete this?");

    //if the response is positive in the alert
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            //removing the item
            recordingArrayList.remove(position);

            //reloading the list
            notifyDataSetChanged();
        }
    });

    //if response is negative nothing is being done
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

        }
    });

    //creating and displaying the alert dialog
    AlertDialog alertDialog = builder.create();
    alertDialog.show();
}

}

これは記録リストのアクティビティです:

package com.recorderlite.audio.audiorecorderlite;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.ListView;
import android.widget.TextView;

import java.io.File;
import java.util.ArrayList;

public class RecordingListActivity extends AppCompatActivity {

private Toolbar toolbar;
private RecyclerView recyclerViewRecordings;
private ArrayList<Recording> recordingArraylist;
private RecordingAdapter recordingAdapter;
private TextView textViewNoRecordings;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recording_list);

    recordingArraylist = new ArrayList<Recording>();

    initViews();

    fetchRecordings();

}

private void fetchRecordings() {

    File root = android.os.Environment.getExternalStorageDirectory();
    String path = root.getAbsolutePath() + "/AudioRecorderLite/Audios";
    Log.d("Files", "Path: " + path);
    File directory = new File(path);
    File[] files = directory.listFiles();
    Log.d("Files", "Size: "+ files.length);
    if( files!=null ){

        for (int i = 0; i < files.length; i++) {

            Log.d("Files", "FileName:" + files[i].getName());
            String fileName = files[i].getName();
            String recordingUri = root.getAbsolutePath() + "/AudioRecorderLite/Audios/" + fileName;

            Recording recording = new Recording(recordingUri,fileName,false);
            recordingArraylist.add(recording);
        }

        textViewNoRecordings.setVisibility(View.GONE);
        recyclerViewRecordings.setVisibility(View.VISIBLE);
        setAdaptertoRecyclerView();

    }else{
        textViewNoRecordings.setVisibility(View.VISIBLE);
        recyclerViewRecordings.setVisibility(View.GONE);
    }

}

private void setAdaptertoRecyclerView() {
    recordingAdapter = new RecordingAdapter(this,recordingArraylist);
    recyclerViewRecordings.setAdapter(recordingAdapter);
}

private void initViews() {

    /** setting up the toolbar  **/
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitle(R.string.recording_list);
    toolbar.setTitleTextColor(getResources().getColor(android.R.color.holo_orange_dark));
    setSupportActionBar(toolbar);

    /** enabling back button ***/
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    /** setting up recyclerView **/
    recyclerViewRecordings = (RecyclerView) findViewById(R.id.recyclerViewRecordings);
    recyclerViewRecordings.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL, false));
    recyclerViewRecordings.setHasFixedSize(true);

    textViewNoRecordings = (TextView) findViewById(R.id.textViewNoRecordings);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()){

        case android.R.id.home:
            this.finish();
            return true;
        default:
            return super.onOptionsItemSelected(item);

    }

}



    public void onClick(View view) {


    }

}
ムニール

以下のコードを変更してみてください

public void removeAt(int position) {
    recordingArrayList.remove(position);
    notifyItemRemoved(position);
    notifyItemRangeChanged(position, recordingArrayList.size());

    String uri = recordingArrayList.get(position).getUri();
    File file = new File (uri);
    file.delete();
}

文字列uri = Recording.getUri();

この行は、nullオブジェクトからURIを取得するときに問題を引き起こすため、次のように変更します。

String uri = recordingArrayList.get(position).getUri();

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

divをクリックしてローカルストレージからアイテムを削除するにはどうすればよいですか?

分類Dev

mp3ファイルのディレクトリからプレイリストを作成するにはどうすればよいですか?

分類Dev

ストレージ値からkBを削除(トリム)するにはどうすればよいですか?

分類Dev

C#でリストからアイテムを削除するにはどうすればよいですか?

分類Dev

jqueryでリストからアイテムを削除するにはどうすればよいですか?

分類Dev

Pythonでリストからアイテムを削除するにはどうすればよいですか?

分類Dev

typesafe configのリストからアイテムを削除するにはどうすればよいですか?

分類Dev

dict値からリストアイテムを削除するにはどうすればよいですか?

分類Dev

Reactのリストからアイテムを削除するにはどうすればよいですか?

分類Dev

React Nativeのリストからアイテムを削除するにはどうすればよいですか?

分類Dev

Ansibleリストからアイテムを削除するにはどうすればよいですか?

分類Dev

特定の番号で終わるアイテムをローカルストレージから削除するにはどうすればよいですか?

分類Dev

Aws s3からオーディオファイル(mp3)をストリーミングするにはどうすればよいですか?

分類Dev

選択したアイテムを非同期ストレージから削除するにはどうすればよいですか?

分類Dev

FlatListのストレージからアイテムを削除するにはどうすればよいですか?

分類Dev

Python 3でネストされたリストから複数のアイテムを削除するにはどうすればよいですか?

分類Dev

音楽ネットワークストリームをmp3ファイルに保存するにはどうすればよいですか?

分類Dev

マイクからの音声をmp3形式でストリーミングするにはどうすればよいですか?

分類Dev

アプリでswiftを使用してmp3ファイルをストリーミングするにはどうすればよいですか?

分類Dev

数字ではないリストアイテムを削除するにはどうすればよいですか?

分類Dev

onTapを使用している場合、リストと画面からアイテムを削除するにはどうすればよいですか?

分類Dev

MP3を再度トランスコードせずに、すでにエンコードされたMP3ファイルの先頭からほんの一瞬をトリミングするにはどうすればよいですか?

分類Dev

UWPアプリケーションのリストからアイテムを削除するにはどうすればよいですか?

分類Dev

ルートリクエストパラメータから既存のアイテムを削除するにはどうすればよいですか?--Laravel 5.5

分類Dev

ストリームから数字と空白を削除するにはどうすればよいですか?

分類Dev

Ansibleテンプレートリストのアイテムを削除または除外するにはどうすればよいですか?

分類Dev

リスト内のアイテムがフィールドのどこかに表示されるかどうかに基づいて、データフレームから列を削除するにはどうすればよいですか?

分類Dev

ローカルストレージアイテムから個別のリストアイテムを作成し、それらをTo Doリストに表示するにはどうすればよいですか?

分類Dev

別のフォームのリストからアイテムを追加/削除するにはどうすればよいですか?

Related 関連記事

  1. 1

    divをクリックしてローカルストレージからアイテムを削除するにはどうすればよいですか?

  2. 2

    mp3ファイルのディレクトリからプレイリストを作成するにはどうすればよいですか?

  3. 3

    ストレージ値からkBを削除(トリム)するにはどうすればよいですか?

  4. 4

    C#でリストからアイテムを削除するにはどうすればよいですか?

  5. 5

    jqueryでリストからアイテムを削除するにはどうすればよいですか?

  6. 6

    Pythonでリストからアイテムを削除するにはどうすればよいですか?

  7. 7

    typesafe configのリストからアイテムを削除するにはどうすればよいですか?

  8. 8

    dict値からリストアイテムを削除するにはどうすればよいですか?

  9. 9

    Reactのリストからアイテムを削除するにはどうすればよいですか?

  10. 10

    React Nativeのリストからアイテムを削除するにはどうすればよいですか?

  11. 11

    Ansibleリストからアイテムを削除するにはどうすればよいですか?

  12. 12

    特定の番号で終わるアイテムをローカルストレージから削除するにはどうすればよいですか?

  13. 13

    Aws s3からオーディオファイル(mp3)をストリーミングするにはどうすればよいですか?

  14. 14

    選択したアイテムを非同期ストレージから削除するにはどうすればよいですか?

  15. 15

    FlatListのストレージからアイテムを削除するにはどうすればよいですか?

  16. 16

    Python 3でネストされたリストから複数のアイテムを削除するにはどうすればよいですか?

  17. 17

    音楽ネットワークストリームをmp3ファイルに保存するにはどうすればよいですか?

  18. 18

    マイクからの音声をmp3形式でストリーミングするにはどうすればよいですか?

  19. 19

    アプリでswiftを使用してmp3ファイルをストリーミングするにはどうすればよいですか?

  20. 20

    数字ではないリストアイテムを削除するにはどうすればよいですか?

  21. 21

    onTapを使用している場合、リストと画面からアイテムを削除するにはどうすればよいですか?

  22. 22

    MP3を再度トランスコードせずに、すでにエンコードされたMP3ファイルの先頭からほんの一瞬をトリミングするにはどうすればよいですか?

  23. 23

    UWPアプリケーションのリストからアイテムを削除するにはどうすればよいですか?

  24. 24

    ルートリクエストパラメータから既存のアイテムを削除するにはどうすればよいですか?--Laravel 5.5

  25. 25

    ストリームから数字と空白を削除するにはどうすればよいですか?

  26. 26

    Ansibleテンプレートリストのアイテムを削除または除外するにはどうすればよいですか?

  27. 27

    リスト内のアイテムがフィールドのどこかに表示されるかどうかに基づいて、データフレームから列を削除するにはどうすればよいですか?

  28. 28

    ローカルストレージアイテムから個別のリストアイテムを作成し、それらをTo Doリストに表示するにはどうすればよいですか?

  29. 29

    別のフォームのリストからアイテムを追加/削除するにはどうすればよいですか?

ホットタグ

アーカイブ