Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android xamarin替换渲染器中的新视图_Android_Xamarin - Fatal编程技术网

Android xamarin替换渲染器中的新视图

Android xamarin替换渲染器中的新视图,android,xamarin,Android,Xamarin,您好,我正在尝试在Android中为boxview制作一个渲染器。我需要添加渲染新视图。无法显示该视图。谁能告诉我出了什么问题,解释一下它是怎么工作的 这是我的渲染器中的方法 protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) { base.OnElementChanged(e); var activity = this.Context a

您好,我正在尝试在Android中为boxview制作一个渲染器。我需要添加渲染新视图。无法显示该视图。谁能告诉我出了什么问题,解释一下它是怎么工作的

这是我的渲染器中的方法

     protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) {
        base.OnElementChanged(e);

        var activity = this.Context as Activity;

        if (e.OldElement == null) {
            // Connect the control to its renderer.
            PKInputView inputView = (PKInputView)this.Element;

            var viewGroup = (global::Android.Views.ViewGroup)ViewGroup;

            //Creating Layout
            global::Android.Widget.RelativeLayout layout = new global::Android.Widget.RelativeLayout(viewGroup.Context);
            //Creating TextView
            global::Android.Widget.TextView text = new global::Android.Widget.TextView(this.Context);
            text.Text = "ahoj";
            text.SetHeight(30);
            text.SetTextColor(global::Android.Graphics.Color.Red);

            //Set up layers
            layout.AddView(text);
            viewGroup.AddView(layout);
        }
protected override void OnElementChanged(ElementChangedEventArgs e){
基础。一个要素发生变化(e);
var activity=this.Context作为活动;
if(e.OldElement==null){
//将控件连接到其渲染器。
PKInputView inputView=(PKInputView)this.Element;
var viewGroup=(global::Android.Views.viewGroup)viewGroup;
//创建布局
global::Android.Widget.RelativeLayout布局=新的global::Android.Widget.RelativeLayout(viewGroup.Context);
//创建文本视图
global::Android.Widget.TextView text=新的global::Android.Widget.TextView(this.Context);
text.text=“ahoj”;
文本设置高度(30);
text.SetTextColor(全局::Android.Graphics.Color.Red);
//设置图层
布局。添加视图(文本);
添加视图(布局);
}

将e.OldElement替换为此控件:

if (this.Control == null) {
删除此项,因为它将引发异常(除非BoxView继承自PKInputView):

然后在if语句范围的末尾设置本机视图:

    this.SetNativeControl(viewGroup);
}
我假设渲染器看起来像这样:

public class BoxViewRenderer : ViewRenderer<BoxView, global::Android.Views.ViewGroup>
public类BoxViewRenderer:ViewRenderer

我必须包括全班,因为你的建议不起作用

[assembly: ExportRenderer(typeof(PKInputView), typeof(PKInputViewRenderer))]

namespace takeapayment.Droid.Renderers {

public class PKInputViewRenderer : BoxRenderer, CCDataSource {
    /*
    //header
    private global::Android.Widget.AbsoluteLayout header = Android.Widget.AbsoluteLayout();
    private TextView title = new TextView();
    private global::Android.Widget.Button saveButton = new Button();
    */

    protected void OnCreate(Bundle savedInstanceState) {
        this.OnCreate(savedInstanceState);

    }

    protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) {
        base.OnElementChanged(e);

        var activity = this.Context as Activity;

        if (e.OldElement == null) {
            // Connect the control to its renderer.
            PKInputView inputView = (PKInputView)this.Element;

            var viewGroup = (global::Android.Views.ViewGroup)ViewGroup;

            //Creating Layout
            global::Android.Widget.RelativeLayout layout = new global::Android.Widget.RelativeLayout(viewGroup.Context);
            //Creating TextView
            global::Android.Widget.TextView text = new global::Android.Widget.TextView(this.Context);
            text.Text = "ahoj";
            text.SetHeight(30);
            text.SetTextColor(global::Android.Graphics.Color.Red);

            //Set up layers
            layout.AddView(text);
            viewGroup.AddView(layout);
        }
    }
[程序集:ExportRenderer(typeof(PKInputView)、typeof(PKInputViewRenderer))]
命名空间takeapayment.Droid.Renderers{
公共类PKInputViewRenderer:BoxRenderer,CCDataSource{
/*
//标题
私有全局::Android.Widget.AbsoluteLayout标头=Android.Widget.AbsoluteLayout();
私有文本视图标题=新建文本视图();
私有全局::Android.Widget.Button saveButton=new Button();
*/
创建时受保护的void(Bundle savedInstanceState){
this.OnCreate(savedInstanceState);
}
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e){
基础。一个要素发生变化(e);
var activity=this.Context作为活动;
if(e.OldElement==null){
//将控件连接到其渲染器。
PKInputView inputView=(PKInputView)this.Element;
var viewGroup=(global::Android.Views.viewGroup)viewGroup;
//创建布局
global::Android.Widget.RelativeLayout布局=新的global::Android.Widget.RelativeLayout(viewGroup.Context);
//创建文本视图
global::Android.Widget.TextView text=新的global::Android.Widget.TextView(this.Context);
text.text=“ahoj”;
文本设置高度(30);
text.SetTextColor(全局::Android.Graphics.Color.Red);
//设置图层
布局。添加视图(文本);
添加视图(布局);
}
}

}

如果要替换控件,应从viewrenderer派生渲染器。 试试这些代码。还有这个vdo

[程序集:ExportRenderer(typeof(PKInputView)、typeof(PKInputViewRenderer))]
公共类PKInputViewRenderer:ViewRenderer,CCDataSource
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
//将控件连接到其渲染器。
PKInputView inputView=e.NewElement??e.OldElement;;
//创建文本视图
global::Android.Widget.TextView text=新的global::Android.Widget.TextView(this.Context);
text.text=“ahoj”;
文本设置高度(30);
text.SetTextColor(全局::Android.Graphics.Color.Red);
SetNativeControl(文本);
}
}

此vdo将显示自定义渲染器的所有方面。

[assembly: ExportRenderer(typeof(PKInputView), typeof(PKInputViewRenderer))]

namespace takeapayment.Droid.Renderers {

public class PKInputViewRenderer : BoxRenderer, CCDataSource {
    /*
    //header
    private global::Android.Widget.AbsoluteLayout header = Android.Widget.AbsoluteLayout();
    private TextView title = new TextView();
    private global::Android.Widget.Button saveButton = new Button();
    */

    protected void OnCreate(Bundle savedInstanceState) {
        this.OnCreate(savedInstanceState);

    }

    protected override void OnElementChanged(ElementChangedEventArgs<BoxView> e) {
        base.OnElementChanged(e);

        var activity = this.Context as Activity;

        if (e.OldElement == null) {
            // Connect the control to its renderer.
            PKInputView inputView = (PKInputView)this.Element;

            var viewGroup = (global::Android.Views.ViewGroup)ViewGroup;

            //Creating Layout
            global::Android.Widget.RelativeLayout layout = new global::Android.Widget.RelativeLayout(viewGroup.Context);
            //Creating TextView
            global::Android.Widget.TextView text = new global::Android.Widget.TextView(this.Context);
            text.Text = "ahoj";
            text.SetHeight(30);
            text.SetTextColor(global::Android.Graphics.Color.Red);

            //Set up layers
            layout.AddView(text);
            viewGroup.AddView(layout);
        }
    }