如何在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错误(在第二行)。 问题是:我应该在哪个课程中加上这些陈述?
谢谢!
答案 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;
}
希望这会有所帮助.-