2016-12-07 2 views
0

У меня есть список longs, который inflated в custom listview с кнопками. Я хочу сыграть одну песню на одиночном button клике. Я получаю позицию нажатия кнопки, а также передал песню в методе воспроизведения песни. Но это eventually не играет ни на одну песню. Если я установил playSong(1);, тогда начнется первая песня. Но если я установить playSong(position); тогда он не будет играть какой-либо song.Please ПомощьПрослушать песню From Custom Lisview On BuTTON CLICK с позицией

public abstract class CustomAdapter extends BaseAdapter implements Filterable , SeekBar.OnSeekBarChangeListener { 

    Context context; 
    ArrayList<String> countryList; 
ArrayList<String> mStringFilterList; 
    LayoutInflater inflter; 
    public ImageView img2; 
    Handler mHandler = new Handler(); 
    private SeekBar songProgressBar; 

    public CustomAdapter(Context applicationContext, ArrayList<String> countryList) { 
     this.context = applicationContext; 
     this.countryList = countryList; 
     mStringFilterList = countryList; 

     inflter = (LayoutInflater.from(applicationContext)); 
    } 

    @Override 
    public int getCount() { 
     return countryList.size(); 
    } 

    public void updateData(ArrayList<String> countryList) { 
     this.countryList = countryList; 
     notifyDataSetChanged(); 
    } 

    @Override 
    public Object getItem(int i) { 
     return null; 
    } 

    @Override 
    public long getItemId(int i) { 
     return 0; 
    } 

    @Override 
    public View getView(final int position, View view, ViewGroup viewGroup) { 
     view = inflter.inflate(R.layout.list_itemss, null); 
     String hello = countryList.get(position); 
     Log.d("Hello",hello); 
      playSong(1); 
     String henno1 = String.valueOf(hello.length()); 
     Log.d("hellya",henno1); 
     songProgressBar = (SeekBar) view.findViewById(R.id.songProgressBar); 

     TextView country = (TextView) view.findViewById(R.id.textView); 
     country.setText(hello); 

     songProgressBar.setOnSeekBarChangeListener(this); 

     songCurrentDurationLabel = (TextView) findViewById(R.id.songCurrentDurationLabel); 
     songTotalDurationLabel = (TextView) findViewById(R.id.songTotalDurationLabel); 


     img2 = (ImageView)view.findViewById(R.id.button3); 
     img2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Toast.makeText(Main.this,"Position is --"+position,Toast.LENGTH_LONG).show(); 
       int songIndex = position; 

       playSong(songIndex); 
       Log.d("song_index", String.valueOf(songIndex)); 

    /*I GET THE INDEX IN LOG*/ 

       if(mp.isPlaying()){ 
        if(mp!=null){ 
         mp.pause(); 
         // Changing button image to play button 
         img2.setImageResource(R.drawable.playbutton); 
        } 
       }else{ 
        // Resume song 
        if(mp!=null){ 
         mp.start(); 
         // Changing button image to pause button 
         img2.setImageResource(R.drawable.pausebutton); 
        } 
       } 

       Toast.makeText(Main.this,"Play Song",Toast.LENGTH_LONG).show(); 
      } 
     }); 

     ImageView img =(ImageView)view.findViewById(R.id.button); 

     img.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(Main.this,"Added to Playlist",Toast.LENGTH_LONG).show(); 
       file = new File(path.get(position)); 
       customAdapter.notifyDataSetChanged(); 
      } 
     }); 

     return view; 
    } 

    public void playSong(int songIndex){ 
     // Play song 
     Toast.makeText(Main.this,"Song is Playing",Toast.LENGTH_LONG).show(); 
     int m =songIndex; 
//i ALSO GET THE POSITION IN LOG ON BUTTON CLICK BUT SONG IS NOT PLAYING. 
     Log.d("Printsssss", String.valueOf(m)); 
     try { 
      mp.start(); 
      mp.reset(); 
      mp.setDataSource(songsList.get(songIndex).get("songPath")); 
      mp.prepare(); 
      mp.start(); 
      updateProgressBar(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

ответ

2

Вы можете попытаться запустить плеер от setOnItemClickListner вашей деятельности.

Когда вы запустите свою деятельность, будет вызван метод getView() для всех элементов вашего списка.

listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
       //You have to put here the code to get your song from list of songs 
     } 
    }); 

Я не могу помочь вам больше, я не могу видеть объявление переменных «МП» и «songsList»

+0

thnku .. мужчина !!! теперь itz играет –

1

Adapter «s ответственность, чтобы заполнить ваш List, RecyclerView и т.д., getView является оценка с одним элементом. Если Activity или Fragment разрушает вы должны вручную освободить MediaPlayer ресурсы, которые будут headche для вас, так просто вы должны играть свои песни, добавив onListItemClick в вашем Activity или Fragment

public void onListItemClick(ListView l, View v, int position, long id) { 

} 

Теперь вы будете иметь место, чтобы играть и пауза ваша песня. Удачи :)

+0

thnku для предложения !!! @Haris –