【发布时间】:2017-06-07 06:37:09
【问题描述】:
我有一个很大的列表视图。每个列表视图项都有一个播放按钮(图像)。单击该播放按钮时,它将播放一些小音频文件。
我创建了一个适配器来加载列表视图中的元素,并在播放时实现了 onClick 监听器。
当我启动应用程序时,它正在正确加载列表,但音频出现了一些问题。当我多次(比如 100 次)玩几个(比如 10-12)个项目时,它不会产生任何问题,一切都会顺利进行。
但如果我在列表中播放更多项目,例如 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)我正在从资源中加载音频文件。 -
所有音频文件(大约 100 个)都在资源中。
标签: android audio android-mediaplayer