Я создал RecyclerView
(во фрагменте), в который я добавляю элементы динамически, используя GridLayoutManager
.В каждой ячейке RecyclerView
я загружаю изображения с сервера, используя Пикассо.Теперь проблема в том, что, когда изображения загружаются в первый раз, ячейки RecyclerView
принимают странную высоту, как показано здесь:
Нокогда я меняю вкладку и снова захожу на главную вкладку, все, как я хочу, как показано здесь:
Что мне нужно, чтобызаставить ячейки принимать желаемую ширину и высоту в то время, когда они добавляются в представление переработчика.Чтобы добиться этого, я попытался:
- Получить ширину экрана и установить высоту и ширину ячеек = размер экрана /2.
- Взять ширину
RecyclerView
и сделатьширина и высота ячеек равны половине. - Я присваиваю размеры ячейке в методе
onCreateViewHolder
адаптера.
Но в любом случае мне нужно изменить вкладку (снова загрузить фрагмент), чтобы дать ячейкам желаемую высоту.
Я указал ширину и высоту ячейки в файле макета в качестве содержимого переноса, потому что я хочу, чтобы они устанавливались в соответствии с размером экрана.Я не хочу жестко кодировать любое значение.
Что я делаю не так?Я что-то пропустил?
Для более подробного объяснения код представлен следующим образом:
Файл макета ячейки:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/category_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="@android:color/darker_gray"
android:orientation="vertical"
android:weightSum="1">
<ImageView
android:id="@+id/categoryImage"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:layout_marginTop="0dp"
android:layout_weight="0.8"
android:src="@drawable/icon" />
<TextView
android:id="@+id/categoryName"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="5dp"
android:layout_marginTop="0dp"
android:layout_weight="0.2"
android:text="ORAL CARE"
android:textAlignment="center"
android:textColor="@android:color/black"
android:textSize="15dp" />
</LinearLayout>
RecyclerView
в файле макета фрагмента:
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerViewCategories"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView11" />
Адаптер RecyclerView:
public class CategoryRecyclerViewAdapter extends RecyclerView.Adapter<CategoryRecyclerViewAdapter.ViewHolder> {
private List<MedicineCategoryDataModel> categoryData = new ArrayList<MedicineCategoryDataModel>();
private LayoutInflater layoutInflater;
private ItemClickListener itemClickListener;
private Context context;
private int itemWidth;
public CategoryRecyclerViewAdapter(Context context, List<MedicineCategoryDataModel> data, int width) {
this.layoutInflater = LayoutInflater.from(context);
this.categoryData = data;
this.context = context;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = layoutInflater.inflate(R.layout.layout_category_item, parent, false);
// this is the point where I was trying to set cell's width and height.
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
String categoryName = categoryData.get(position).categoryName;
holder.textViewCategoryName.setText(categoryName);
String iconUrl = categoryData.get(position).iconUrl;
EPClientLayer.getInstance().getImageHandler().loadImage(context,iconUrl, holder.imageViewCategoryIcon);
}
@Override
public int getItemCount() {
return categoryData.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textViewCategoryName;
ImageView imageViewCategoryIcon;
ViewHolder(View itemView) {
super(itemView);
textViewCategoryName = (TextView) itemView.findViewById(R.id.categoryName);
imageViewCategoryIcon = (ImageView) itemView.findViewById(R.id.categoryImage);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (itemClickListener != null) itemClickListener.onItemClick(view, getAdapterPosition());
}
}
public String getItem(int id) {
return categoryData.get(id).categoryName;
}
public void setClickListener(ItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}