2016-03-25 6 views
1

so bin ich ziemlich neu in Android-Programmierung und fragte mich, wie ich über das Senden eines Lieds Index aus der Bibliothek Fragment an den Player Fragment gehen und dann den Song automatisch spielen, mit diesem Index. Bis jetzt mit dem Code, den ich habe, passiert nichts, wenn ein ListItem angeklickt wird. Und ich meine nichts. Es stürzte mich nicht wie erwartet ab. Hier ist der Code ...Wie würde ich einen Song-Index an einen benutzerdefinierten Musik-Player senden?

LibraryFragment

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View rootView = inflater.inflate(R.layout.fragment_library, container, false); 

    songView = (ListView)rootView.findViewById(R.id.song_list); 
    songList = new ArrayList<>(); 

    getSongList(); 

    Collections.sort(songList, new Comparator<Song>() { 
     public int compare(Song a, Song b) { 
      return a.getTitle().compareTo(b.getTitle()); 
     } 
    }); 

    songView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      // Getting list item index 
      int songIndex = position; 

      // Starting new intent 
      Intent in = new Intent(getActivity().getApplicationContext(), LibraryFragment.class); 
      // Sending songIndex to Player Fragment 
      in.putExtra("songIndex", songIndex); 
      getActivity().setResult(100, in); 

     } 
    }); 

    SongAdapter songAdt = new SongAdapter(getActivity(), songList); 
    songView.setAdapter(songAdt); 

    return rootView; 
} 

PlayerFragment

@Override 
public void onActivityResult(int requestCode, 
           int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == 100){ 
     currentSongIndex = data.getExtras().getInt("songIndex"); 
     playSong(currentSongIndex); 
    } 

} 

Jede Hilfe bei allen wäre sehr willkommen! Prost!

Antwort

0

Sie können Intents nicht für Fragmente verwenden, sie sind nicht startbar.

Auch was denken Sie, getActivity().setResult(100, in); tut? Du benutzt das sicherlich falsch.

Bitte lesen Sie die official documentation auf Fragment-Kommunikation.


Im Detail

  • Ihre LibraryFragment Bedürfnisse eine Schnittstelle zu definieren, z.B.

public interface LibraryListener { void onIndexSelected(int index) }

  • Ihre Tätigkeit hat diese Schnittstelle zu implementieren. In dieser Implementierung muss der Index an die PlayerFragment übergeben werden, die eine öffentliche Methode definieren sollte, um genau dies zu tun.

  • Jetzt können Sie Ihre LibraryFragment ((LibraryListener)getActivity()).onIndexSelected(index);

+0

Ah nennen, danke. Weißt du, wie ich den Index senden würde? Ich bin immer noch leicht verwirrt. – Cryosin

+0

Ich habe ein kurzes Beispiel angegeben. Wenn Sie weder dieses noch das Beispiel in der Dokumentation verstehen, sollten Sie einen Schritt zurückgehen und lernen, wie Interfaces und Casts in Java funktionieren. – F43nd1r

Verwandte Themen