我有一个很长的列表视图。每个列表项都有一个播放按钮(图片)。点击该播放按钮将播放一些小的音频文件。
我创建了一个适配器来加载列表视图中的元素,并在播放时实现了onClick监听器。
当我启动应用程序时,它会正确地加载列表,但音频存在问题。当我播放一些项目(如10-12)多次(如100次),它不会产生任何问题,一切都会顺利运行。 但是,如果我在列表中播放更多的项目,例如30-40个项目。它会停止为后面的项目加载音频文件。对于已经工作的项目,它将继续工作,对于新项目,则无法工作。
我创建了一个适配器来加载列表视图中的元素,并在播放时实现了onClick监听器。
当我启动应用程序时,它会正确地加载列表,但音频存在问题。当我播放一些项目(如10-12)多次(如100次),它不会产生任何问题,一切都会顺利运行。 但是,如果我在列表中播放更多的项目,例如30-40个项目。它会停止为后面的项目加载音频文件。对于已经工作的项目,它将继续工作,对于新项目,则无法工作。
public class WordListAdapter extends BaseAdapter{
private ArrayList<Word> wordArrayList;
private Activity activity;
private static LayoutInflater inflater=null;
MediaPlayer mp;
public WordListAdapter(Activity activity, ArrayList<Word> wordArrayList) {
this.activity = activity;
this.wordArrayList = wordArrayList;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return wordArrayList.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
View view = convertView;
if(convertView == null) {
view = inflater.inflate(R.layout.item_word, null);
}
TextView word1 = (TextView) view.findViewById(R.id.word1);
TextView word2 = (TextView) view.findViewById(R.id.word2);
ImageView imageWord = (ImageView) view.findViewById(R.id.imageWord);
ImageView playWord = (ImageView) view.findViewById(R.id.playWord);
word1.setText(wordArrayList.get(position).lang1);
word2.setText(wordArrayList.get(position).lang2);
if(wordArrayList.get(position).pic == 0) {
imageWord.setVisibility(GONE);
}
else {
imageWord.setImageResource(wordArrayList.get(position).pic);
}
playWord.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp = MediaPlayer.create(activity, wordArrayList.get(position).audio);
mp.start();
}
});
return view;
}
}
我想问题出在我创建了太多的媒体播放器对象。
如何解决?
MediaPlayer.create(activity, wordArrayList.get(position).audio)
我正在从资源中加载音频文件。 - Rahul Kumar