好吧,我正在使用包含音频文件的Recyclerview,当我点击任何项目时,音频播放工作正常,但搜索栏没有更新!最后一个位置项搜索栏正在更新和播放。我没有找到确切的解决方案。这是我的代码。
RecyclerAdapter
public class AudiorecyclerAdapter extends RecyclerView.Adapter<AudiorecyclerAdapter.MyViewHolder> {
private ProgressBar pb;
private List<GettingAudio> datalist;
MediaPlayer mp=new MediaPlayer();
private Context context;
Activity act;
private Dialog dialog;
private String BASE_URL = "http://zuman.e3.amazon/";
private String medialink,titlestring;
private int downloadedSize = 0 ;
TextView cur_val;
SeekBar seek;
private int totalSize = 0;
public AudiorecyclerAdapter(Context context,Activity act,List<GettingAudio> list){
this.datalist=list;
this.context=context;
this.act=act;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.listreff,parent,false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position)
{
holder.title.setText(datalist.get(position).getTitle());
holder.postedby.setText(datalist.get(position).getPostedby());
holder.postedon.setText(datalist.get(position).getDatetime());
holder.likes.setText(datalist.get(position).getLikes());
final String media=datalist.get(position).getMedia();
final String tit=holder.title.getText().toString();
Log.d("Harry Coooooovaaa", datalist.toString());
seek=holder.seekBar;
holder.play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
medialink=media;
titlestring=tit;
showProgress();
Toast.makeText(context,medialink,Toast.LENGTH_LONG).show();
new Thread(new Runnable() {
@Override
public void run() {
downloadFile();
}
}).start();
}
});
}
@Override
public int getItemCount() {
return datalist.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder{
TextView title,postedby,likes,postedon;
Button play;
SeekBar seekBar;
public MyViewHolder(View itemView) {
super(itemView);
title = (TextView) itemView.findViewById(R.id.audiotitle);
title=(TextView)itemView.findViewById(R.id.audiotitle);
postedby=(TextView)itemView.findViewById(R.id.postedby);
postedon=(TextView)itemView.findViewById(R.id.date);
likes=(TextView)itemView.findViewById(R.id.likes);
play=(Button)itemView.findViewById(R.id.butplay);
seekBar=(SeekBar)itemView.findViewById(R.id.seekBar);
}
}
private void showProgress(){
dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.myprogressdialog);
dialog.setTitle("Download Progress");
cur_val = (TextView) dialog.findViewById(R.id.cur_pg_tv);
cur_val.setText("Starting download...");
dialog.show();
pb = (ProgressBar)dialog.findViewById(R.id.progress_bar);
pb.setProgress(0);
pb.setProgressDrawable(context.getResources().getDrawable(R.drawable.green_progress));
}
private void downloadFile(){
try {
URL url = new URL(BASE_URL+medialink);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
//connect
urlConnection.connect();
final String folder_main = "Apna";
//set the path where we want to save the file
/* File SDCardRoot =new File(Environment.getExternalStorageDirectory(),folder_main);
if (!SDCardRoot.exists()) {
SDCardRoot.mkdirs();
}
//create a new file, to save the downloaded file
File file = new File(SDCardRoot,title);*/
File wallpaperDirectory = new File(Environment.getExternalStorageDirectory(),folder_main);
//have the object build the directory structure, if needed.
wallpaperDirectory.mkdirs();
//create a File object for the output file
final String perfection=titlestring.replaceAll("\"","");
File outputFile = new File(wallpaperDirectory, perfection+".mp3");
//now attach the OutputStream to the file object, instead of a String representation
FileOutputStream fileOutput = new FileOutputStream(outputFile);
//Stream used for reading the data from the internet
InputStream inputStream = urlConnection.getInputStream();
//this is the total size of the file which we are downloading
totalSize = urlConnection.getContentLength();
act.runOnUiThread(new Runnable() {
public void run() {
pb.setMax(totalSize);
}
});
//create a buffer...
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
fileOutput.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
// update the progressbar //
act.runOnUiThread(new Runnable() {
public void run() {
pb.setProgress(downloadedSize);
float per = ((float)downloadedSize/totalSize) * 100;
cur_val.setText("Downloaded " + downloadedSize + "KB / " + totalSize + "KB (" + (int)per + "%)" );
}
});
}
//close the output stream when complete //
fileOutput.close();
act.runOnUiThread(new Runnable() {
public void run() {
dialog.dismiss();
try{
mp.setDataSource(Environment.getExternalStorageDirectory().getPath()+"/Apna/"+perfection+".mp3");//Write your location here
mp.prepareAsync();
// mp.start();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mRunnable.run();
}
});
}
catch(Exception e)
{
e.printStackTrace();
}
}
});
} catch (final MalformedURLException e) {
showError("Error : MalformedURLException " + e);
Log.d("dfdsfsd", e.toString());
e.printStackTrace();
} catch (final IOException e) {
Log.d("dfdsfsd", e.toString());
showError("Error : IOException " + e);
e.printStackTrace();
}
catch (final Exception e) {
Log.d("dfdsfsd", e.toString());
showError("Error : Please check your internet connection " + e);
}
}
private void showError(final String err){
act.runOnUiThread(new Runnable() {
public void run() {
Toast.makeText(context, err, Toast.LENGTH_LONG).show();
Log.d("dfdsfsd", err);
}
});
}
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
@Override
public void run() {
if(mp != null) {
//set max value
int mDuration = mp.getDuration();
seek.setMax(mDuration);
//update total time text view
//set progress to current position
int mCurrentPosition = mp.getCurrentPosition();
seek.setProgress((int) mp.getCurrentPosition());
// holder.seekBar.setProgress(mCurrentPosition);
//update current time text view
//handle drag on seekbar
seek.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if(mp != null && fromUser){
mp.seekTo(progress);
}
}
});
}
//repeat above code every second
mHandler.postDelayed(this, 10);
}
};
}
MyActivity
public class Recyclerviewaudio extends AppCompatActivity {
RecyclerView recyclerView;
List<List<GettingAudio>> arrylist;
List<GettingAudio> mlist;
AudiorecyclerAdapter audiorecyclerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recyclerviewaudio);
recyclerView = (RecyclerView) findViewById(R.id.audiorecycler);
init();
}
public void init() {
Retrofit retrofit = new Retrofit.Builder().baseUrl("http://zuman.ec3.amazonaws.com/")
.addConverterFactory(GsonConverterFactory.create()).build();
Apicall api = retrofit.create(Apicall.class);
Call<List<List<GettingAudio>>> call = api.GetAudio("Audio", "1", "0");
call.enqueue(new Callback<List<List<GettingAudio>>>() {
@Override
public void onResponse(Call<List<List<GettingAudio>>> call, Response<List<List<GettingAudio>>> response) {
arrylist = response.body();
mlist = arrylist.get(0);
Log.d("Boooooodyyy", arrylist.toString());
// Log.d("response code", new Gson().toJson(response.body()));
// Log.d("response body", response.body().toString());
audiorecyclerAdapter = new AudiorecyclerAdapter(Recyclerviewaudio.this, Recyclerviewaudio.this, mlist);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL));
recyclerView.setAdapter(audiorecyclerAdapter);
}
@Override
public void onFailure(Call<List<List<GettingAudio>>> call, Throwable t) {
Log.d("Throwable", t.getMessage());
}
});
}
}
答案 0 :(得分:0)
使用seekBar =(SeekBar)itemView.findViewById(R.id.seekBar);在Onclick
实施例
public void onClick(View v){
seekBar=(SeekBar)itemView.findViewById(R.id.seekBar);
.......
//Yourcode
}