私はアンドロイドと現在RecyclerViewを学習しています。この例では、再生ボタンをクリックしてから終了すると、特定の生のサウンドファイルを再生しています。私は非常に迅速にプレー押すと、私はIllegalStateExceptionが得られますので、私は状態を遷移さに問題があるRecyclerViewでのオーディオの再生と解放
- : 私は真剣に、私はいくつかの問題や疑問を持っているようしかし、ベストプラクティスであるかについていくつかのポインタを使用することができます、おそらくすでにリリースされているプレーヤーをリリースしようとしています。
- 私は明らかにリリース後に無効にして、nullをチェックするべきですが、ネストされたスコープで使用しているので、最終的に宣言しなければならず、混乱させることはできません。何か。 onBindViewHolder内のアイテムにclickListner設定
- も大幅に遅く、viewHolderクラスの行全体にclickListnerを追加未満応答思われます。
がクラッシュし、「遅さ」を引き起こすというあなたのMediaPlayerを設定してRecyclerViewで正しくリソースを管理し、私が間違って何をやっているのベストプラクティスは何ですか?
// ViewHolder
public static class myHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView playBtn;
public myHolder(View v){
super(v);
playBtn = (ImageView) v.findViewById(R.id.playBtn);
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
}
}
// onBindViewHolder/onCompletionListener
@Override
public void onBindViewHolder(myHolder holder, int position) {
myClass item = itemList.get(position);
final MediaPlayer mediaPlayer = MediaPlayer.create(holder.itemView.getContext(), item.getAudioSource());
holder.playBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
mediaPlayer.start();
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
}
});
}
メディアプレーヤーを「リッスン」しているのはなぜですか?ユーザーインタラクションに反応する必要がある場合は、2つのリスナーを追加しないでください:onLongClick()およびonClick()。 LongClickを開始することができ、ユーザーがプレスを停止すると、onClick()が自動的に呼び出され、再生を停止できます。 – Gotiasits
私は実際に再生を停止する必要はありません、私が使用するサウンドファイルはわずか1〜2秒です。 setOnCompleteListenerは、ファイルの再生が完了すると、それが意味するものならすべてのリソースを解放するようになっています。 – LuckyXII