2016-08-02 2 views
0

안녕하세요, 저는 listview (사용자 정의 어댑터)에 문제가 있습니다. 오디오 (mp3 파일)를 재생하는 미디어 플레이어와 listview를 구현했습니다. 내 원시 폴더에 mp3 파일을 포함 시켰습니다. 나는 이것이 recycle view라는 것을 안다. 나의 문제는 6-7 행 후에 동일한 mp3 파일이 0 번째 위치에 있던 파일과 동일하게 재생된다는 것이다. 이 모든 솔루션은 무엇입니까? 내 주요 활동 공용 클래스 MainActivity가 활동을 확장 그것은 convertView 재사용된다해서이다 {listview (사용자 정의 어댑터) with media player 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

OnItemClickListener 구현합니다. (convertView != null) 인 경우에도 holder.btn1.setOnClickListener(new View.OnClickListener() { ...으로 설정하십시오.

또한 모든 뷰 항목에 대해 단일 MediaPlayer를 여러 번 만드는 것보다 더 좋을 수 있습니다.

+0

감사합니다 mahn u rock :). – Ezio