2016-05-31 6 views
1

Ich habe eine benutzerdefinierte ListView und eine benutzerdefinierte ViewCell für ein Xamarin Forms-Projekt mit iOS und Android. Ich habe das benutzerdefinierte listView erstellt, so dass meine Liste Farben wechseln konnte (was ziemlich erfolgreich ist). Leider habe ich beim Erstellen der benutzerdefinierten ListView die ausgewählte Zelle nicht mehr markiert, weshalb ich die benutzerdefinierten ViewCells erstellt habe.Legen Sie die Hintergrundfarbe des ausgewählten Listenansicht Element aus benutzerdefinierten Liste Xamarin

Ich habe Probleme mit der Android-Seite der Dinge. Ich kann die Farbe ändern, wenn die Zelle ausgewählt wird. Aber ich bin mir nicht sicher, wie ich die Farbe ändern kann, sobald eine andere Zelle ausgewählt ist.

Hier ist meine Custom Klasse ...

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); 
    } 
} 

ziemlich geradlinig, nur die Farbe setzt auf dem Index basiert. (Vielleicht Theres etwas, das ich hier hinzufügen, kann die ausgewählte Zelle zu behandeln?)

Heres die CustomCell Klasse:

public class CustomCell : ViewCell 
{ 
    public const String isSelectedProperty = "IsSelected"; 

    public CustomCell() 
    { 
    } 
} 

und in den iOS-Renderer:

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; 
    } 
} 

und die Android-Renderer :

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); 
     } 

    } 
} 

So funktioniert der iOS-Teil. Und der androide Teil "arbeitet" wie in es wählt die Farbe der Zelle aus, aber die Farbe bleibt. Ich möchte nur die ausgewählte Zelle eine andere Hintergrundfarbe haben. Irgendwelche Ideen?

+0

Sie meinen also, Sie haben 3 Farben. 2 für die abwechselnden Listenelemente und 1 wenn eine davon ausgewählt ist? @Shane –

+0

@AkashAmin Ja, das stimmt. Der iOS-Teil funktioniert, aber ich finde keine ähnliche Methode wie "cell.SelectedBackgroundView" für Android. Was ich für Android habe funktioniert auch, aber es ändert nur die Farbe der Zelle alle zusammen und nicht wieder zurück, wenn es nicht ausgewählt – John

+0

Vielleicht [dies] (http://stackoverflow.com/a/25887514/833197) SO Antwort kann Sie in die richtige Richtung zeigen –

Antwort

1

Für Android, i im styles.xml im benutzerdefinierten Thema Definition gesetzt habe:

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

Und das löst in jeder Listenansicht meine ausgewählte Hintergrundfarbe. Ich schätze, das könnte dir helfen.

Verwandte Themen