Created
April 16, 2015 08:24
-
-
Save MilenPavlov/63b49cdac893fdaa73c4 to your computer and use it in GitHub Desktop.
Horizontal ScrollView for (Xamarin) Android using RecyclerView and GridLayoutManager
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//MainActivity's private vars and key methods: | |
public class MainActivity : FragmentActivityBase | |
{ | |
private RecyclerView _recyclerViewPhotosTakenEdit; | |
private IList<PhotoItemModel> _photoItemsModel; | |
private RecyclerView.LayoutManager _layoutManager; | |
private PhotoQuestionRecyclerAdapter _photoQuestionImageAdapter; | |
...... | |
} | |
private void AttachControlls() | |
{ | |
_recyclerViewPhotosTakenEdit = FindViewById<RecyclerView>(Resource.Id.recyclerViewPhotoQuestionImagesEdit); | |
_layoutManager = new GridLayoutManager(this, 1, GridLayoutManager.Horizontal, false); | |
_recyclerViewPhotosTakenEdit.SetLayoutManager(_layoutManager); | |
} | |
private void PopulateRecyclerViewAdapterData() | |
{ | |
_photoQuestionImageAdapter = new PhotoQuestionRecyclerAdapter(this, _photoItemsModel, false); | |
_recyclerViewPhotosTakenEdit.SetAdapter(_photoQuestionImageAdapter); | |
} | |
//PhotoQuestionRecyclerAdapter code: | |
public class PhotoQuestionRecyclerAdapter : RecyclerView.Adapter | |
{ | |
public event EventHandler<int> ItemClick; | |
private readonly Activity _context; | |
private readonly IList<PhotoItemModel> _photoItems; | |
private readonly bool _showSelected; | |
public PhotoQuestionRecyclerAdapter(Activity context, IList<PhotoItemModel> photoItems, bool showSelected = true) | |
{ | |
_context = context; | |
_photoItems = photoItems; | |
_showSelected = showSelected; | |
} | |
public override void OnBindViewHolder(RecyclerView.ViewHolder holder, int position) | |
{ | |
if (!_photoItems.Any()) return; | |
if (holder != null) | |
{ | |
var photoItemModel = _photoItems[position]; | |
(holder as PhotoItemViewHolder).ImageDescriptionTextView.SetText(photoItemModel.PhotoItem.Description, | |
TextView.BufferType.Normal); | |
(holder as PhotoItemViewHolder).ImageView.SetImageBitmap( | |
BitmapFactory.DecodeByteArray(photoItemModel.PhotoItem.Image, 0, | |
photoItemModel.PhotoItem.Image.Length)); | |
if (_showSelected) | |
(holder as PhotoItemViewHolder).ImageSelectedCheckBox.Selected = photoItemModel.Selected; | |
} | |
} | |
public override RecyclerView.ViewHolder OnCreateViewHolder(ViewGroup parent, int viewType) | |
{ | |
View view = LayoutInflater.From(parent.Context) | |
.Inflate(Resource.Layout.RecyclerViewItemTemplate, parent, false); | |
PhotoItemViewHolder photoItemViewHolder = new PhotoItemViewHolder(view, OnClick, _photoItems, _showSelected); | |
return photoItemViewHolder; | |
} | |
void OnClick(int position) | |
{ | |
ItemClick?.Invoke(this, position); | |
} | |
public override int ItemCount => _photoItems.Count; | |
public void ToggleItemSelection(int position, RecyclerView currentView) | |
{ | |
var photoItemModel = _photoItems[position]; | |
photoItemModel.Selected = !photoItemModel.Selected; | |
var viewHolder = currentView?.FindViewHolderForAdapterPosition(position) as PhotoItemViewHolder; | |
if (viewHolder != null && _showSelected) | |
{ | |
viewHolder.ImageSelectedCheckBox.Checked = photoItemModel.Selected; | |
((ApplicationGlobal)_context.ApplicationContext).PhotoItemsModel = _photoItems; | |
} | |
} | |
} | |
public class PhotoItemViewHolder : RecyclerView.ViewHolder | |
{ | |
private readonly IList<PhotoItemModel> _items; | |
public ImageView ImageView { get; set; } | |
public CheckBox ImageSelectedCheckBox { get; set; } | |
public TextView ImageDescriptionTextView { get; set; } | |
public PhotoItemViewHolder(View view, Action<int> listener, IList<PhotoItemModel> items, bool showSelected) : base(view) | |
{ | |
_items = items; | |
ImageDescriptionTextView = (TextView)view.FindViewById(Resource.Id.textViewRecyclerViewTemplateImageDescription); | |
ImageView = view.FindViewById<ImageView>(Resource.Id.imageViewRecyclerViewTemplateImage); | |
ImageSelectedCheckBox = view.FindViewById<CheckBox>(Resource.Id.checkBoxRecyclerViewTemplateSelected); | |
ImageSelectedCheckBox.Visibility = !showSelected ? ViewStates.Invisible : ViewStates.Visible; | |
view.Click += (sender, args) => listener(AdapterPosition); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment