Xamarin,将图像分配给Fragment中的ImageView

时间:2017-06-11 20:12:11

标签: c# android-fragments xamarin xamarin.android imageview

如何在Fragment中为ImageView指定一个可绘制的png? 我在选项卡的布局中声明了一个ImageView:

  

ImageView的

i

标签类位于:

  

class tabFragment1:V4Fragment

     

{

|V|*(S+1)

我想从drawable文件夹中分配.png,如下所示:

  

ImageView iv_icon = FindViewById(Resource.Id.iv_icon);   iv_icon.SetImageResource(Resource.Drawable.ic_weather_cloudy_white_48dp);

如果我把它放在MainActivity OnCreate()方法中(当然在ViewPager初始化之下),我得到NullRefenceException错误(在第二行)。 问题是:我应该在哪个课程中加上这些陈述?

谢谢!

2 个答案:

答案 0 :(得分:1)

问题在于ImageView的实例化。您不能只调用FindViewById,您必须从片段引用中调用FindViewById。如:

ImageView iv_icon = fragmentName.FindViewById(Resource.Id.iv_icon); 
//fragmentName is the reference to your fragment *after its been inflated*

抛出异常是因为您试图从不正确实例化的ImageView调用SetImageResource。 ImageView为null,因此抛出NullReferenceException。

另一方面,来自活动的观点的膨胀将如下工作:

View v = FindViewById(Resource.Id.X);

FindViewById是一种便捷方法,因此您无需继续调用activityName.FindViewById()。 片段不存在这种便利。

总之,从活动中膨胀视图:

View v = FindViewById(Resource.Id.X);

从片段中膨胀视图:

View v = fragmentName.FindViewById(Resource.Id.X);

答案 1 :(得分:1)

在你的片段OnCreateView中,一旦你给视图/布局充气,就可以访问它的ui元素,在你的情况下是你的ImageView。

修改此方法:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle saved)
{
    var v = inflater.Inflate(Resource.Layout.tabLayout1, container, false);

    ImageView iv_icon = v.FindViewById(Resource.Id.iv_icon); 

    iv_icon.SetImageResource(Resource.Drawable.ic_weather_cloudy_white_48dp);

    return v;
}

希望这会有所帮助.-