2017-05-17 4 views
0

ich habe android Anwendung gemacht, in der ich alle Audioansätze vom beweglichen Speicher lese und addiere alle Liede, um Listenansicht besonders anzufertigen. In meiner Listenansicht gibt es eine einfache Textansicht, in der Lieder jetzt platziert werden. Ich möchte einen Klick-Listener hinzufügen, um sie aufzulisten und diese Lieder aus der Listenansicht zu erhalten und an eine andere Aktivität zum Abspielen von Liedern zu übergeben. Ich habe zwei Klassen MainActivity.javaWie man Lied von der Listenansicht in Einzelteil klickt, klicken in android

public class MainActivity extends AppCompatActivity { 
ListView lv; 
String[] items; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    lv = (ListView) findViewById(R.id.lvPlaylist); 

    final ArrayList<File> mySongs = findSongs(Environment.getExternalStorageDirectory()); 
    items = new String[mySongs.size()]; 
    for (int i = 0; i < mySongs.size(); i++) { 
     //toast(mySongs.get(i).getName().toString()); 
     items[i] = mySongs.get(i).getName().toString().replace(".mp3", "").replace(".wav", ""); 
    } 

    ArrayAdapter<String> adp = new ArrayAdapter<String>(getApplicationContext(), R.layout.song_layout, R.id.textView, items); 
    lv.setAdapter(adp); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long l) { 

      Intent intent = new Intent(MainActivity.this,Player.class); 
      intent.putExtra("pos",position); 
      intent.putExtra("songList",mySongs); 
      startActivity(intent); 
      // startActivity(new Intent(getApplicationContext(),Player.class).putExtra("pos",position).putExtra("songlist",mySongs)); 

     } 
    }); 

} 

public ArrayList<File> findSongs(File root) { 
    ArrayList<File> al = new ArrayList<File>(); 
    File[] files = root.listFiles(); 
    for (File singleFile : files) { 
     if (singleFile.isDirectory() && !singleFile.isHidden()) { 
      al.addAll(findSongs(singleFile)); 

     } else { 
      if (singleFile.getName().endsWith(".mp3") || singleFile.getName().endsWith(".wav")) { 
       al.add(singleFile); 
      } 
     } 

    } 
    return al; 
} 

public void toast(String text) { 
    Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); 
} 

}

hier ist Palyer.java

public class Player extends AppCompatActivity implements View.OnClickListener{ 
static MediaPlayer mp; 
ArrayList mySongs; 
int position; 
Uri u; 
Thread updateSeekBar; 


SeekBar sb; 
Button btPlay, btFF, btFB, btPv, btNxt; 

MediaPlayer mediaPlayer; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_player); 

    btPlay = (Button)findViewById(R.id.btPlay); 
    btFF = (Button)findViewById(R.id.btFF); 
    btFB = (Button)findViewById(R.id.btFB); 
    btPv = (Button)findViewById(R.id.btPv); 
    btNxt = (Button)findViewById(R.id.btNxt); 

    btPlay.setOnClickListener(this); 
    btFF.setOnClickListener(this); 
    btFB.setOnClickListener(this); 
    btPv.setOnClickListener(this); 
    btNxt.setOnClickListener(this); 

    sb = (SeekBar)findViewById(R.id.seekBar); 
    updateSeekBar = new Thread(){ 
     @Override 
     public void run() { 
      //super.run(); 
      int totalDuration = mp.getDuration(); 
      int currentPosition = 0; 
      sb.setMax(totalDuration); 
      while(currentPosition<totalDuration){ 
       try{ 
        sleep(500); 
        currentPosition= mp.getCurrentPosition(); 
        sb.setProgress(currentPosition); 
       } catch(InterruptedException e){ 
        e.printStackTrace(); 

       } 
      } 
     } 
    }; 
    if(mp!=null){ 
     mp.stop(); 
     mp.release(); 
    } 

    Intent i = getIntent(); 
    mySongs.add(i.getStringExtra("songList")); 
    position=i.getIntExtra("pos",0); 
    u = Uri.parse(mySongs.get(position).toString()); 
    mp = MediaPlayer.create(getApplicationContext(),u); 

    mp.release(); 
    mp.prepareAsync(); 

    mp.start(); 
    sb.setMax(mp.getDuration()); 

    updateSeekBar.start(); 
    sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
     @Override 
     public void onProgressChanged(SeekBar seekBar, int progress, boolean b) { 

     } 

     @Override 
     public void onStartTrackingTouch(SeekBar seekBar) { 

     } 

     @Override 
     public void onStopTrackingTouch(SeekBar seekBar) { 
      mp.seekTo(seekBar.getProgress()); 

     } 
    }); 


} 

@Override 
public void onClick(View view) { 
    int id = view.getId(); 
    switch (id){ 
     case R.id.btPlay: 
      if(mp.isPlaying()){ 
       btPlay.setText(">"); 
       mp.pause(); 
      } 
      else{ 
       mp.start(); 
       btPlay.setText("||"); 
      } 
      break; 
     case R.id.btFF: 
      mp.seekTo(mp.getCurrentPosition()+5000); 
      break; 
     case R.id.btFB: 
      mp.seekTo(mp.getCurrentPosition()-5000); 
      break; 
     case R.id.btNxt: 
      mp.stop(); 
      mp.release(); 
      position = (position+1)%mySongs.size(); 
      u = Uri.parse(mySongs.get(position).toString()); 
      mp = MediaPlayer.create(getApplicationContext(),u); 
      mp.start(); 
      sb.setMax(mp.getDuration()); 
      break; 
     case R.id.btPv: 
      mp.stop(); 
      mp.release(); 
      position = (position-1<0)? mySongs.size()-1: position-1; 
      /*if(position-1<0){ 
       position = mySongs.size()-1; 
      } 
      else{ 
       position = position-1; 
      }*/ 
      u = Uri.parse(mySongs.get(position).toString()); 
      mp = MediaPlayer.create(getApplicationContext(),u); 
      mp.start(); 
      sb.setMax(mp.getDuration()); 
      break; 
    } 

} 

}

, wenn ich meine Anwendung gestartet, und klicken Sie auf die Songs in der Listenansicht meine Anwendung ist abgestürzt kann jemand helfen, Lied aus meiner Listenansicht in Element klicken Sie auf Listener danke.

+1

Geben Sie den Fehler logcat ein. –

+0

zeigt Fehler dort mySongs.add (i.getStringExtra ("songList")); –

+0

fügen Sie Ihr Crash-Protokoll zur Klärung hinzu –

Antwort

1
Make your songs arraylist serializable as: 
public class SongsList implements Serializable 
/// getter and setter 
From Songs Files add object to SongList class then send this class 
as: 
Intent intent = new Intent(SourceActivity.this, 
argetActivity.class); 
intent.putExtra("SongListExtra", songList); 
On receiving activity: 
ArrayList<SongList> songlist = new ArrayList<SongList>(); 
songlist = (ArrayList<SongList>) 
getIntent().getSerializableExtra("SongListExtra"); 
Instead of sending songList to player activity you can send that 
particular song details on list item clicked according to position. 
Hope it helps.. 
Verwandte Themen