2016-05-31 6 views
1

У меня есть собственный 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 работает. И андроидная часть «работает», как в ней, выбирает цвет ячейки, но цвет остается. Я хочу, чтобы только выбранная ячейка имела другой цвет фона. Есть идеи?

+0

Значит, вы хотите сказать, что у вас есть 3 цвета. 2 для переменных элементов списка и 1, если какой-либо из них выбран? @Shane –

+0

@AkashAmin Да, это правильно. Часть iOS работает, но я не могу найти метод, подобный 'cell.SelectedBackgroundView' для android. То, что у меня есть для android, также работает, но оно просто меняет цвет ячейки все вместе и не меняется обратно, когда его не выбрано – John

+0

Возможно [это] (http://stackoverflow.com/a/25887514/833197) SO ответ может указывать вас в правильном направлении. –

ответ

1

для Android, в styles.xml в определении пользовательской темы я поставил:

<item name="android:colorFocusedHighlight">@color/color_coloredbackground</item> 
<item name="android:colorActivatedHighlight">@color/color_coloredbackground</item> 
<item name="android:activatedBackgroundIndicator">@color/color_coloredbackground</item> 

И это решает мой выбранный цвет фона в любом ListView. Наверное, это может вам помочь.

Смежные вопросы