W bazie mam kolumny: id, url, tytuł, data oraz kolumnę "rek" która określa co ma być wyświetlane.
Jesli rek = 0 to ustawiam wysokośc obrazu na 160 dp a pod spodem dodaję tytuł obrazu i datę
Jesli rek =1 to obraz ma wypełnić cały cardView a tytuł i data nie są wyświetlane.
Dane pobieram za pomocą JSON i wyświetlam je za pomocą RecyclerView w CardView.
Z tego co się orientuję to RecyclerView działa w taki sposób, że podmienia treść w wygenerowanych kartach (z moich obserwacji wynika, że generuje ich 5)
Problem pojawia się gdy rek = 1 a obrazy mają różną wysokość. Po przewijaniu RecyclerView zapamiętuje wysokości kart i nie są wypełnione obrazem (tworzy się górny i dolny margines). Dla wszystkich rek = 0 wyświetla poprawnie czyli obraz ma 160 dp a pod spodem jest tytuł i data.
kod adaptera:
public class NewsAdapter extends RecyclerView.Adapter<NewsAdapter.MyViewHolder> {
private Context mContext;
private List<TabelaNews> mDataNews;
public NewsAdapter(Context mContext, List<TabelaNews> mDataNews) {
this.mContext = mContext;
this.mDataNews = mDataNews;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
View view;
LayoutInflater inflater = LayoutInflater.from(mContext);
view = inflater.inflate(R.layout.karta_news, parent, false);
final MyViewHolder viewHolder = new MyViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
String mRek = mDataNews.get(holder.getAdapterPosition()).getRek();
if (mRek.equals("1")) {
holder.tvTytul.setVisibility(View.GONE);
holder.tvData.setVisibility(View.GONE);
holder.ivImage.getLayoutParams().height = ViewGroup.LayoutParams.WRAP_CONTENT;
RequestOptions option = new RequestOptions().dontTransform().placeholder(R.drawable.obraz_def).error(R.drawable.obraz_def);
Glide.with(mContext).load(mDataNews.get(position).getImageUrl()).apply(option).into(holder.ivImage);
} else {
holder.tvTytul.setVisibility(View.VISIBLE);
holder.tvData.setVisibility(View.VISIBLE);
holder.tvTytul.setText(mDataNews.get(position).getTytul());
String mData = mDataNews.get(holder.getAdapterPosition()).getData();
String mRok = mData.substring(0, 4);
String mMiesiac = mData.substring(5, 7);
String mDzien = mData.substring(8, 10);
holder.tvData.setText(mDzien + "." + mMiesiac + "." + mRok + " r.");
holder.ivImage.getLayoutParams().height = (int) holder.ivImage.getResources().getDimension(R.dimen.imageview_height);
RequestOptions option = new RequestOptions().centerCrop().placeholder(R.drawable.obraz_default).error(R.drawable.obraz_default);
Glide.with(mContext).load(mDataNews.get(position).getImageUrl()).apply(option).into(holder.ivImage);
}
}
@Override
public int getItemCount() {
return mDataNews.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
TextView tvTytul;
TextView tvData;
ImageView ivImage;
public MyViewHolder(View itemView) {
super(itemView);
tvTytul = itemView.findViewById(R.id.news_tytul);
tvData = itemView.findViewById(R.id.news_data);
ivImage = itemView.findViewById(R.id.news_img);
}
}
}
Jakiś pomysł aby rozwiązać ten problem?