1

我想在屏幕上放一个图像视图但是。它给出了“对象引用空”异常。我认为我有一个逻辑错误。请帮我找到它。

这是我的代码:

我的布局 xml:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">    
    <Button 
    android:id="@+id/button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/changeImage"/>  
    <ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/sampleviewer"
    android:src="@drawable/sampleimage"        
    android:scaleType="fitCenter"/>   

    </LinearLayout>         

在 OnCreate 函数中:

    protected override void OnCreate (Bundle bundle)
    {
        base.OnCreate (bundle);

        //Create the user interface in code
        var layout = new LinearLayout (this);
        layout.Orientation = Orientation.Vertical;

        var aLabel = new TextView (this);
        aLabel.Text = "Hello, Xamarin.Android";

        var aButton = new Button (this);      
        aButton.Text = "Say Hello";
        aButton.Click += (sender, e) => {
            aLabel.Text = "Hello from the button";
        };  

        var button = new Button (this);
        button.Text = "AAAAAA";


        button.Click += delegate {

            aLabel.Text = " PRESS THE BUTTON";
            var imageView = FindViewById<ImageView> (Resource.Id.sampleviewer); // After this line imageView variable is still null
            imageView.SetImageResource (Resource.Drawable.sampleimage);
        };

        layout.AddView (aLabel);
        layout.AddView (aButton);           
        layout.AddView (button);
        SetContentView (layout);


   }
4

1 回答 1

2

您在这里以两种不同的方式构建布局。

  1. 您有一个包含您的 XML 布局ImageView,但您从未在代码中的任何位置引用该 XML 布局,因此 Android 永远不会加载它(因此您无法访问它)。
  2. 您还可以通过创建新LinearLayout对象并向其添加其他视图来在 Java 代码中创建布局。此布局没有ImageView.

当你SetContentView()在这里打电话时:

SetContentView (layout);

您告诉 Android 使用您在代码中创建的布局。如果要使用 XML 布局,可以更改为:

SetContentView(Resource.Layout.Main);

(替换Main为您的 XML 文件的实际名称。)

否则,您需要ImageView在 Java 代码中添加 。但是您可能不想混合和匹配 XML 布局与 Java 代码布局。

另请注意,您必须在调用SetContentView()之前先调用FindViewById()

您可能还想通读 Xamarin 的资源布局教程。

于 2013-10-29T18:22:44.933 回答