Добрый день. Написал приложение в котором есть ListView и написал для нее адаптер. но сейчас нужно изменить и поставить RecyclerView. Для RecyclerView попробовал изменять код адаптера но не получилось. Помогите пожалуйста.
public class SongAdapter extends BaseAdapter {
//song list and layout
private ArrayList<Song> songs;
private LayoutInflater songInf;
//constructor
public SongAdapter(Context c, ArrayList<Song> theSongs){
songs=theSongs;
songInf=LayoutInflater.from(c);
}
@Override
public int getCount() {
return songs.size();
}
@Override
public Object getItem(int arg0) {
return null;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//map to song layout
LinearLayout songLay = (LinearLayout)songInf.inflate
(R.layout.song, parent, false);
//get title and artist views
TextView songView = (TextView)songLay.findViewById(R.id.song_title);
TextView artistView = (TextView)songLay.findViewById(R.id.song_artist);
//get song using position
Song currSong = songs.get(position);
//get title and artist strings
songView.setText(currSong.getTitle());
artistView.setText(currSong.getArtist());
//set position as tag
songLay.setTag(position);
return songLay;
}
}
а вот код который я попробовал изменить.
public class MPAdapter extends RecyclerView.Adapter<MPAdapter.RecyclerViewHolder> {
private ArrayList<Song> songs;
LayoutInflater layoutInflater;
RecyclerView.ViewHolder viewHolder;
public MPAdapter(Context context,ArrayList<Song> songs)
{
this.songs=songs;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LinearLayout linearLayout=(LinearLayout)layoutInflater.inflate(R.layout.single_song,parent,false);
RecyclerViewHolder viewHolder=new RecyclerViewHolder(linearLayout,context,songs);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
Song song=songs.get(position);
holder.titleText.setText(song.getTitle());
holder.arstistText.setText(song.getArtist());
}
@Override
public int getItemCount() {
return songs.size();
}
public static class RecyclerViewHolder extends RecyclerView.ViewHolder
{
TextView titleText;
TextView arstistText;
Context context;
ArrayList<Song> songs=new ArrayList<>();
public RecyclerViewHolder(View itemView, Context context, final ArrayList<Song> songs)
{
super(itemView);
this.context=context;
this.songs=songs;
titleText=(TextView)itemView.findViewById(R.id.song_title);
arstistText=(TextView)itemView.findViewById(R.id.song_artist);
}
}
}
Не путайте конструктор холдера с конструктором адаптера. В onCreateViewHolder
вы тоже нахимичили, гляньте, должно работать
public class MPAdapter extends RecyclerView.Adapter<MPAdapter.RecyclerViewHolder> {
List<Song> songs;
LayoutInflater layoutInflater;
Context context;
public MPAdapter(Context context, List<Song> songs)
{
this.songs=songs;
this.context=context;
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_song, parent, false);
RecyclerViewHolder viewHolder=new RecyclerViewHolder(v);
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
Song song = getItem(position);
holder.titleText.setText(song.getTitle());
holder.arstistText.setText(song.getArtist());
}
@Override
public int getItemCount() {
return songs.size();
}
public Song getItem(int position) {
return songs.get(position);
}
public class RecyclerViewHolder extends RecyclerView.ViewHolder
{
TextView titleText;
TextView arstistText;
public RecyclerViewHolder(View itemView)
{
super(itemView);
titleText=(TextView)itemView.findViewById(R.id.song_title);
arstistText=(TextView)itemView.findViewById(R.id.song_artist);
}
}
}
Делаю приложение с обоями, НО возникла проблема с отображением картинки, картинка появляется только после того как я нажимаю на кнопку "Установить...
Есть 3 таба для навигации, в каждом табе фрагмент, во фрагменте listview