适配器内的MediaPlayer播放错误的曲目

时间:2017-03-01 17:16:39

标签: android-mediaplayer

我是Android开发的新手,我在一个项目列表中添加了一个MediaPlayer,以便为列出的每个单词播放发音。

但是,正在播放错误的曲目,我无法弄清楚如何将正确的曲目链接到列表视图中的每个项目。 当我滚动时ID会改变,例如我在日志中可以看到的,所以我认为有些东西我误解了。 我无法理解的是,为什么它适用于ImageView,但不适用于音频文件。

public class WordsAdapter extends ArrayAdapter<Words>{

    private int colorview;
    private View listItemView;
    private Words currentWords;

    public WordsAdapter(Context context, ArrayList<Words> words, int color){

        super(context, 0, words);
        colorview = color;

        }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        listItemView = convertView;
        if(listItemView == null) {
            listItemView = LayoutInflater.from(getContext()).inflate(
                    R.layout.list_view_black, parent, false);
        }

        currentWords = getItem(position);
        ImageView image = (ImageView) listItemView.findViewById(R.id.imageicon);
        if(currentWords.hasImage()) {
            image.setImageResource((currentWords.getImageID()));
            image.setVisibility(View.VISIBLE);
        }else image.setVisibility(View.GONE);

        TextView defaultTextView = (TextView) listItemView.findViewById(R.id.text_default);
        defaultTextView.setText(currentWords.getDefaultWord());

        TextView miwokTextView = (TextView) listItemView.findViewById(R.id.text_miwok);
        miwokTextView.setText(currentWords.getMiwokWord());

        View linearWords = listItemView.findViewById(R.id.linear_words);
        linearWords.setBackgroundResource(colorview);



        Button ButtonPlay = (Button) listItemView.findViewById(R.id.playButton);
        ButtonPlay.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v){
                MediaPlayer player = MediaPlayer.create(v.getContext(), currentWords.getAudioFile());
                Log.v("Audio id : ", player.getTrackInfo().toString());
                player.start();
            }
        });
        return listItemView;
    }
}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

变量currentWords需要在方法内声明并设置为final。

public View getView(int position,View convertView,ViewGroup parent){

[...]

final words currentWords = getItem(position);

[...]

}