2016-04-02 18 views
0

Meine Aktivität wird aufgerufen, also sollte der Benutzer einige Songs auswählen, die er zu einer Playlist hinzufügen möchte. Wie kann ich ein RecyclerView auswählen (die Hintergrundfarbe sollte eine Akzentfarbe sein) und wie bekomme ich die Liste oder das Array der ausgewählten Songs von meinem RecyclerView?Wie erstelle ich eine auswählbare Liste mit RecyclerView?

Mein SelectSongsActivity:

Und mein RecyclerViewAdapter:

public class SelectSongRecyclerViewAdapter extends RecyclerView.Adapter<SelectSongRecyclerViewAdapter.Holder> { 
    private Song[] sSongs; 
    private List<Song> selectedSongs; 

    public SelectSongRecyclerViewAdapter(Song[] songs) { 
     sSongs = songs; 

     selectedSongs = new ArrayList<>(); 
    } 

    @Override 
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_songview, parent, false); 

     Holder holder = new Holder(view); 

     return holder; 
    } 

    @Override 
    public void onBindViewHolder(Holder holder, int position) { 
     //holder.imvSong.setImageResource(R.drawable.standardartwork); 
     holder.txvSongTitle.setText(sSongs[position].getTitle()); 
     holder.txvSongInfo.setText(sSongs[position].getArtists()); 
    } 

    @Override 
    public int getItemCount() { 
     return sSongs != null ? sSongs.length : 0; 
    } 

    public Song[] getSelectedSongs() { 
     Song[] songs = new Song[selectedSongs.size()]; 

     return selectedSongs.toArray(songs); 
    } 

    public class Holder extends RecyclerView.ViewHolder { 
     LinearLayout linearLayout; 
     ImageView imvSong; 
     TextView txvSongTitle; 
     TextView txvSongInfo; 

     public Holder(View layout) { 
      super(layout); 

      linearLayout = (LinearLayout) layout; 

      imvSong = (ImageView) layout.findViewById(R.id.imvSong); 
      txvSongTitle = (TextView) layout.findViewById(R.id.adap_txvSongtitle); 
      txvSongInfo = (TextView) layout.findViewById(R.id.txvSongInfo); 
     } 
    } 
} 

Dank!

Antwort

0

Sie meinen, wenn Sie auf das lineare Layout klicken? Was Sie tun können, ist in der onbindviewholder-

holder.linearlayout.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     selectedSongs.add(sSongs[position]); 
     } 
    }); 

Um in eine bereits ausgewählte Songs angezeigt werden verschiedene farb-

if (selectedSongs.contains(sSongs[position])) { 
    holder.linearlayout.setBackgroundColor(R.color.color_accent); 
} else { 
    //else as viewholders are reused 
    holder.linearlayout.setBackgroundColor(R.color.default_color); 
} 
+0

es wie zum Beispiel die Auswahl in whatsapp Kontakte sein sollte (das Element markiert ist) –

+0

Dann sollte der obige Code Ihre Probleme lösen. Auch dann halter.linearlayout.setBackgroundColor (R.color.default_color); sollte ersetzt werden durch dateHolder.linearlayout.setBackgroundResource (R.drawable.item_selector); item_selector- http://stackoverflow.com/questions/34467536/attr-selectabeiteitbackground-effect-shows-only-on-longtap/35128898#35128898 meine Antwort –

Verwandte Themen