2017-03-01 4 views
0

私はAndroidの開発にはまったく新しく、アイテムのリストにMediaPlayerを追加して、各単語の発音が再生されるようにしました。間違ったトラックを再生しているアダプタの中のMediaPlayer

しかし、間違ったトラックが再生されているため、正しいトラックをリストビューの各アイテムにリンクする方法を理解できません。 たとえば、ログに表示されているようにスクロールしているときにIDが変わるので、私が誤解したことがあると思います。 私が理解していないのは、ImageViewなどでは、オーディオファイルではなく、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; 
    } 
} 

答えて

0

解決策が見つかりました。

変数currentWordsをメソッド内で宣言し、finalに設定する必要があります。

パブリックビューgetViewメソッド(INT位置、表示convertView、のViewGroup親){

[...]

最後の言葉currentWords =のgetItem(位置)。

[...]

}

関連する問題