gpt4 book ai didi

android - Recyclerview 在滚动期间更改项目

转载 作者:IT王子 更新时间:2023-10-28 23:40:40 24 4
gpt4 key购买 nike

我有一个 RecyclerView。每行都有一个播放按钮、 TextView 和进度条。当点击播放按钮时,必须从我的 sdcard 播放音频并且必须进度条问题是当我向下滚动回收 View 时,会更改下一行的进度条。意味着我可以一次在屏幕上放置 5 个项目。当我滚动到第 6 行时,第 6 行搜索栏突然变化。

public class ListAdapter extends RecyclerView.Adapter {

private List<Historyitem> stethitems;
public Context mContext;
public Activity activity;
public Handler mHandler;

static MediaPlayer mPlayer;
static Timer mTimer;

public ListAdapter(Activity activity,Context mContext,List<Historyitem> stethitems) {
this.stethitems = stethitems;
this.mContext = mContext;
this.activity = activity;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {

View rootView = LayoutInflater.
from(mContext).inflate(R.layout.stethoscopeadapteritem, null, false);
RecyclerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
rootView.setLayoutParams(lp);
mHandler = new Handler();
return new MyViewHolder(rootView);
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, int position) {

final Historyitem dataItem = stethitems.get(position);
final MyViewHolder myViewHolder = (MyViewHolder) viewHolder;
myViewHolder.progressplay.setProgress(0);
myViewHolder.stethdatetime.setText(dataItem.getReported_Time());
myViewHolder.stethhosname.setText(dataItem.getdiv());

if(dataItem.getPatient_Attribute().replaceAll(" ","").equals("")){
myViewHolder.stethdoctorname.setText(dataItem.getunit());
} else {
myViewHolder.stethdoctorname.setText(dataItem.getPatient_Attribute());
}

myViewHolder.stethstreamplay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

FileDownload(dataItem.getmsg(),
myViewHolder.progressplay);

}
});
}

@Override
public int getItemCount() {

return stethitems.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

final CustomTextRegular stethdatetime;
final CustomTextView stethhosname;
final CustomTextBold stethdoctorname;
final ImageButton stethstreamplay;
final NumberProgressBar progressplay;

public MyViewHolder(View itemView) {
super(itemView);

stethdatetime = (CustomTextRegular)
itemView.findViewById(R.id.stethdatetime);
stethhosname = (CustomTextView)
itemView.findViewById(R.id.stethhosname);
stethdoctorname = (CustomTextBold)
itemView.findViewById(R.id.stethdoctorname);
stethstreamplay = (ImageButton)
itemView.findViewById(R.id.stethstreamplay);
progressplay= (NumberProgressBar)
itemView.findViewById(R.id.progressplay);


}
}
public void FileDownload(final String downloadpath,

final NumberProgressBar progressplay) {

new AsyncTask<NumberProgressBar, Integer, NumberProgressBar>() {
NumberProgressBar progress;
@Override
protected void onPreExecute() {
super.onPreExecute();
try {
if(mPlayer!=null){
mPlayer.stop();
}
}catch (Exception e){
}
try {
if(mTimer != null){
mTimer.purge();
mTimer.cancel();
}
}catch (Exception e){
}
}

@Override
protected NumberProgressBar doInBackground(NumberProgressBar... params) {
int count;
progress = progressplay;
try {

final List<NameValuePair> list = new ArrayList<NameValuePair>();
list.add(new BasicNameValuePair("pid",id));

URL url = new URL(Config.requestfiledownload + "?path=" +
downloadpath);
URLConnection connection = url.openConnection();
connection.connect();

int lenghtOfFile = connection.getContentLength();
// download the file
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(Environment.getExternalStorageDirectory() +
"record.wav");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
// publishing the progress....
publishProgress((int) (total * 100 / lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {

}
return progress;
}
@Override
protected void onPostExecute(final NumberProgressBar numberProgressBar) {
super.onPostExecute(numberProgressBar);

try {
StartMediaPlayer(numberProgressBar);
} catch (Exception e){
e.printStackTrace();
}

}
}.execute();
}

public void StartMediaPlayer(final NumberProgressBar progressbar){
Uri playuri = Uri.parse("file:///sdcard/record.wav");
mPlayer = new MediaPlayer();
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mPlayer.reset();
try {
mPlayer.setDataSource(mContext, playuri);
} catch (IllegalArgumentException e) {

} catch (SecurityException e) {

} catch (IllegalStateException e) {

} catch (Exception e) {

}
try {
mPlayer.prepare();
} catch (Exception e) {

}

mPlayer.start();
progressbar.setMax(mPlayer.getDuration());
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
if(mPlayer!=null) {
mPlayer.release();
progressbar.setProgress(0);
}
if(mTimer != null){
mTimer.purge();
mTimer.cancel();
}
}
});
mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
mHandler.post(new Runnable() {
@Override
public void run() {
progressbar.setProgress(mPlayer.getCurrentPosition());
}
});
}
},0,500);
}}

最佳答案

请试试这个

  1. 如果您使用的是 ListView - 覆盖以下方法。

     @Override
    public int getViewTypeCount() {
    return getCount();
    }

    @Override
    public int getItemViewType(int position) {
    return position;
    }
  2. 如果您使用的是 RecyclerView - 仅覆盖 getItemViewType() 方法。

     @Override
    public int getItemViewType(int position) {
    return position;
    }

关于android - Recyclerview 在滚动期间更改项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32065267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com