Xamarin RendererFactory.GetRenderer() не работает

Я разрабатываю кроссплатформенное управление с использованием Xamarin. Моя цель - иметь список элементов, которые можно выбрать. У меня есть некоторый код iOS, который отлично работает:

    private UIView CreateViewWithTemplate(UIPickerView pickerView, nint row)
            {
                // create our content presenter
                DYMOContentPresenter presenter = new DYMOContentPresenter();

                // set its data template to the one from our control
                presenter.ItemTemplate = this._pickerControl.ItemTemplate;

                // set the data to the correct item from the list
                presenter.ObjectContent = this._pickerControl.Items.ElementAt((int)row);

                // and use the xamarin forms renderer factory to get a renderer for the item
                IVisualElementRenderer renderer = RendererFactory.GetRenderer(presenter);

                // tell the renderer the size of the view and 
                renderer.SetElementSize(new Size(pickerView.Frame.Width, ROW_HEIGHT));

                // then get the native view and return


 return renderer.NativeView;
        }

Тем не менее, моя попытка реализовать это в Android не работает:

private View CreateViewWithTemplate(int position, View convertView, ViewGroup parent)
{            
    // create content presenter
    DYMOContentPresenter presenter = new DYMOContentPresenter();

    // set its data template to the correct item from the list
    presenter.ItemTemplate = this._pickerControl.ItemTemplate;

    // set data to correct list item
    presenter.ObjectContent = this._pickerControl.Items.ElementAt((int) position);

    // use Xamarin forms renderer factory to get a renderer for the item
    IVisualElementRenderer renderer = RendererFactory.GetRenderer(presenter);

    presenter.Layout(new Xamarin.Forms.Rectangle(0, 0, parent.Width, ROW_HEIGHT));
    renderer.UpdateLayout();
    renderer.Tracker.UpdateLayout();
    renderer.ViewGroup.LayoutParameters = new ViewGroup.LayoutParams(parent.Width, ROW_HEIGHT);
    renderer.ViewGroup.Layout(0, 0, parent.Width, ROW_HEIGHT);
    renderer.ViewGroup.BuildDrawingCache();

    // get native view and return
    return renderer.ViewGroup;
}

Я вижу отдельные строки списка, но в них нет текста. Я могу увидеть текст после того, как закомментировал этот код и заменил его простым TextView, так что я подозреваю, что с рендером что-то не так. Я пробовал много вариантов этого кода (указав LayoutParams, пытаясь изменить размер ребенка и т. д.). Ничто не похоже на работу.

0 ответов

Другие вопросы по тегам