2016-08-02 3 views
0

Привет, ребята, я столкнулся с проблемой в списке (пользовательский адаптер). Я реализовал listview с медиаплеером, который воспроизводит аудио (mp3-файл). Я включил mp3-файлы в свою сырую папку. Я знаю, что это recycle view.My проблема после 6-7 строк один и тот же mp3-файл воспроизводится так же, как файл, который был на 0-й позиции. любое решение? Моя основная деятельность общественного класса MainActivity расширяет активность реализует OnItemClickListener {listview (пользовательский адаптер) с медиа-плеером android

ListView lview3; 
    ListViewCustomAdapter adapter; 
    private ArrayList<Object> itemList; 
    private ItemBean bean; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 


     prepareArrayLits(); 
     lview3 = (ListView) findViewById(R.id.listView1); 
     adapter = new ListViewCustomAdapter(this, itemList); 
     lview3.setAdapter(adapter); 

     lview3.setOnItemClickListener(this); 
    } 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position1, long id) { 
     // TODO Auto-generated method stub 
     ItemBean bean = (ItemBean) adapter.getItem(position1); 

     Toast.makeText(this, "Title => "+bean.getTitle()+" \n Description => "+bean.getDescription(), Toast.LENGTH_SHORT).show(); 
    } 

    /* Method used to prepare the ArrayList, 
    * Same way, you can also do looping and adding object into the ArrayList. 
    */ 
    public void prepareArrayLits() 
    { 
     itemList = new ArrayList<Object>(); 

     AddObjectToList(R.drawable.ic_add, "Add", "Add desc",R.raw.mp1); 
     AddObjectToList(R.drawable.ic_delete, "Delete", "Delete desc",R.raw.mp2); 
     AddObjectToList(R.drawable.ic_down, "Down", "Down desc",R.raw.mp3); 
     AddObjectToList(R.drawable.ic_info, "Information", "Information desc",R.raw.mp4); 
     AddObjectToList(R.drawable.ic_help, "Help", "Help desc",R.raw.mp5); 
     AddObjectToList(R.drawable.ic_download, "Download", "Download desc",R.raw.mp6); 
     AddObjectToList(R.drawable.ic_mail, "Mail", "Mail desc",R.raw.mp7); 
     AddObjectToList(R.drawable.ic_search, "Search", "Search desc",R.raw.mp8); 
     AddObjectToList(R.drawable.ic_settings, "Settings", "Settings desc",R.raw.mp9); 
    } 

    // Add one item into the Array List 
    public void AddObjectToList(int image, String title, String desc,int audio) 
    { 
     bean = new ItemBean(); 
     bean.setDescription(desc); 
     bean.setImage(image); 
     bean.setTitle(title); 
     bean.setAudio(audio); 
     itemList.add(bean); 
    } 
} 

мой listviewCustomadapter

public class ListViewCustomAdapter extends ArrayAdapter { 
    MediaPlayer mPlayer; 
    Context c; 
    ArrayList<Object> itemList; 

    public Activity context; 
    public LayoutInflater inflater; 

    public ListViewCustomAdapter(Activity context, ArrayList<Object> itemList) { 
     super(context, R.layout.main); 

     this.context = context; 
     this.itemList = itemList; 
     this.c = context; 
     this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     return itemList.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return itemList.get(position); 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    public static class ViewHolder { 
     ImageView imgViewLogo; 
     TextView txtViewTitle; 
     TextView txtViewDescription; 
     Button btn1, btn2; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 

     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = inflater.inflate(R.layout.items, null); 

      holder.imgViewLogo = (ImageView) convertView.findViewById(R.id.imgViewLogo); 
      holder.btn1 = (Button) convertView.findViewById(R.id.button); 
      holder.btn1.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        if (position == 0) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp1); 
         mPlayer.start(); 
        } 
        if (position == 1) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp2); 
         mPlayer.start(); 
        } 
        if (position == 2) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp3); 
         mPlayer.start(); 
        } 
        if (position == 3) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp4); 
         mPlayer.start(); 
        } 
        if (position == 4) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp5); 
         mPlayer.start(); 
        } 
        if (position == 5) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp6); 
         mPlayer.start(); 
        } 
        if (position == 6) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp7); 
         mPlayer.start(); 
        } 
        if (position == 7) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp8); 
         mPlayer.start(); 
        } 
        if (position == 8) { 
         mPlayer = MediaPlayer.create(getContext(), R.raw.mp9); 
         mPlayer.start(); 
        } 


       } 
      }); 


      holder.btn2 = (Button) convertView.findViewById(R.id.button2); 
      holder.txtViewTitle = (TextView) convertView.findViewById(R.id.txtViewTitle); 
      holder.txtViewDescription = (TextView) convertView.findViewById(R.id.txtViewDescription); 

      convertView.setTag(holder); 
     } else 
      holder = (ViewHolder) convertView.getTag(); 

     ItemBean bean = (ItemBean) itemList.get(position); 

     holder.imgViewLogo.setImageResource(bean.getImage()); 
     holder.txtViewTitle.setText(bean.getTitle()); 
     holder.txtViewDescription.setText(bean.getDescription()); 

     return convertView; 
    } 

} 

ответ

0

Это просто потому, что convertView становится повторно. Set holder.btn1.setOnClickListener(new View.OnClickListener() { ... даже если (convertView != null).

Также было бы лучше использовать один MediaPlayer для всех элементов представления, чем создавать его снова и снова.

+0

Спасибо mahn u rock :). – Ezio