У меня есть собственный ListView и пользовательский ViewCell для проекта Xamarin Forms с iOS и Android. Я создал собственный listView, чтобы мой список мог чередовать цвета (что довольно успешно). К сожалению, когда я создал пользовательский ListView, он остановил выделение выделенной ячейки, поэтому я создал пользовательский ViewCells.Установите цвет фона выбранного элемента списка из пользовательского списка Xamarin
У меня проблемы с андроидной стороной вещей. Я могу изменить цвет, когда ячейка выбрана. Но я не уверен, как изменить цвет назад, когда выбрана другая ячейка.
Вот мой класс CustomList ...
public class CustomList : ListView
{
public CustomList(){}
protected override void SetupContent(Cell content, int index)
{
base.SetupContent (content, index);
var currentCell = content as ViewCell;
currentCell.View.BackgroundColor = index % 2 == 0 ? Color.FromRgb (235, 235, 235) : Color.FromRgb (255, 255, 255);
}
}
Довольно прямо вперед, просто устанавливает цвет на основе индекса. (Может быть, Theres что-то еще, что я могу добавить здесь, чтобы обработать выбранную ячейку?)
Heres класс CustomCell:
public class CustomCell : ViewCell
{
public const String isSelectedProperty = "IsSelected";
public CustomCell()
{
}
}
и в IOS видеообработки:
public class CustomCellRenderer : ViewCellRenderer
{
private UIView view;
public CustomCellRenderer()
{
}
public override UITableViewCell GetCell (Cell item, UITableViewCell reusableCell, UITableView tv)
{
var cell = base.GetCell (item, reusableCell, tv);
if (view == null) {
view = new UIView (cell.SelectedBackgroundView.Bounds);
view.Layer.BackgroundColor = UIColor.FromRGB (128, 204,255).CGColor;
}
cell.SelectedBackgroundView = view;
return cell;
}
}
и андроид визуализатора :
public class CustomCellRenderer : ViewCellRenderer
{
public CustomCellRenderer()
{
}
protected override Android.Views.View GetCellCore(Cell item, Android.Views.View convertView, ViewGroup parent, Context context)
{
var cell = base.GetCellCore (item, convertView, parent, context);
return cell;
}
protected override void OnCellPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnCellPropertyChanged (sender, e);
var customCell = sender as CustomCell;
if (e.PropertyName == CustomCell.isSelectedProperty) {
customCell.View.BackgroundColor = Color.FromRgb (128, 204, 255);
}
}
}
Таким образом, часть iOS работает. И андроидная часть «работает», как в ней, выбирает цвет ячейки, но цвет остается. Я хочу, чтобы только выбранная ячейка имела другой цвет фона. Есть идеи?
Значит, вы хотите сказать, что у вас есть 3 цвета. 2 для переменных элементов списка и 1, если какой-либо из них выбран? @Shane –
@AkashAmin Да, это правильно. Часть iOS работает, но я не могу найти метод, подобный 'cell.SelectedBackgroundView' для android. То, что у меня есть для android, также работает, но оно просто меняет цвет ячейки все вместе и не меняется обратно, когда его не выбрано – John
Возможно [это] (http://stackoverflow.com/a/25887514/833197) SO ответ может указывать вас в правильном направлении. –