В настоящее время я использую библиотеку тимуса https://github.com/timusus/RecyclerView-FastScroll для реализации быстрой прокрутки в моей программе. Есть ли способ иметь разные изображения для каждого предмета? Я не смог найти пример проекта, касающегося манипулирования изображениями. Ближайший образец от автора - дублирование изображений вместо их замены.
Мой фрагмент активности:
public class CollectionFragment extends Fragment {
private CollectionViewModel collectionViewModel;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
collectionViewModel =
ViewModelProviders.of(this).get(CollectionViewModel.class);
View root = inflater.inflate(R.layout.fragment_collection, container, false);
FastScrollRecyclerView recyclerView = root.findViewById(R.id.recycler);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(new MultiViewTypeAdapter());
DividerItemDecoration itemDecoration = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL);
itemDecoration.setDrawable(ResourcesCompat.getDrawable(getResources(), R.drawable.list_divider, null));
recyclerView.addItemDecoration(itemDecoration);
return root;
}
}
Мой адаптер выглядит следующим образом:
public class MultiViewTypeAdapter extends RecyclerView.Adapter<MultiViewTypeAdapter.ViewHolder>
implements FastScrollRecyclerView.SectionedAdapter,
FastScrollRecyclerView.MeasurableAdapter {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false));
}
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return R.layout.list_item_header;
}
return R.layout.list_item;
}
@SuppressLint("DefaultLocale")
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.text.setText(getNameForItem(position));
holder.imgview.setImageResource(getImageForItem(position));
}
@Override
public int getItemCount() {
return 8;
}
@SuppressLint("DefaultLocale")
@NonNull
@Override
public String getSectionName(int position) {
if (position % 2 == 0) {
return String.format("S%d", (position / 2) + 1);
} else {
return String.format("%d", position - position / 2);
}
}
@Override
public int getViewTypeHeight(RecyclerView recyclerView,
@Nullable RecyclerView.ViewHolder viewHolder, int viewType) {
if (viewType == R.layout.list_item_header) {
return recyclerView.getResources().getDimensionPixelSize(R.dimen.list_item_header_height);
} else if (viewType == R.layout.list_item) {
return recyclerView.getResources().getDimensionPixelSize(R.dimen.list_item_height);
}
return 0;
}
@SuppressLint("DefaultLocale")
@NonNull
private String getNameForItem(int position) {
if (position % 2 == 0) {
return String.format("Section %d", (position / 2) + 1);
} else {
return String.format("Item %d", position - position / 2);
}
}
@SuppressLint("DefaultLocale")
@NonNull
private int getImageForItem(int position) {
if (position % 2 == 0) {
return R.drawable.collection_img_1;
} else {
return R.drawable.collection_img_2;
}
}
static class ViewHolder extends RecyclerView.ViewHolder {
public TextView text;
public ImageView imgview;
ViewHolder(View itemView) {
super(itemView);
text = itemView.findViewById(R.id.text);
imgview = itemView.findViewById(R.id.collectionImage);
}
}
}
Затем я столкнулся с этой ошибкой: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageResource(int)' on a null object reference
. Как мне это исправить?