ImageView在Inflated LinearLayout上抛出NullReferenceException

时间:2011-06-01 03:44:39

标签: android imageview nullreferenceexception layout-inflater

在使用LayoutInflater来扩展父布局后,我在ImageView上遇到一些NullReferenceExcpetion问题。正如您在下面的Layout XML中看到的,我有两个TextView和一个ImageView。我可以很好地引用两个TextView,但不能引用ImageView。

当我深入了解膨胀布局的子视图的属性时,我发现两个TextView的 mID 属性都是正确的,但ImageView的 mID 是-1

有人会知道为什么只有ImageView出现为NULL吗?我确定这是愚蠢的,但我无法弄清楚。我还重新创建了Layout XML文件,清理了我的项目等等。

提前致谢!!

布局XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:orientation="vertical">
    <LinearLayout android:layout_width="120px"
                  android:layout_height="wrap_content"
                  android:orientation="vertical">
        <TextView android:id="@+id/weather_forecast_day"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_gravity="center_horizontal"
                  android:textStyle="bold"/>
        <ImageView android:id="@+id/weather_forecast_icon"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_gravity="center_horizontal"/>
        <TextView android:id="@+id/weather_forecast_temps"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_gravity="center_horizontal"
                  android:textStyle="bold"/>
    </LinearLayout>
</LinearLayout>

代码:

mForecastItem = (LinearLayout)View.inflate(WeatherLookup.this, R.layout.weather_forecast_item, null);

((ImageView)mForecastItem.findViewById(R.id.weather_forecast_icon))
                 .setImageDrawable(getResources().getDrawable(R.drawable.weather_sunny));
((TextView)mForecastItem.findViewById(R.id.weather_forecast_day))
                .setText(forecast.DayOfWeek);
((TextView)mForecastItem.findViewById(R.id.weather_forecast_temps))
            .setText(forecast.High + "\u2109 / " + forecast.Low + "\u2109");

3 个答案:

答案 0 :(得分:1)

我以某种方式让这个工作。我正在回答我自己的问题,因为问题是通过其他提供解决方案的方式解决的,然而,Jaydeep和CapDroid的答案都可以正确地用于扩展视图。

在Inflating my view中尝试了多种不同的方法之后,我第三次重新创建了Layout XML文件,更改了ID并重新清理了Project。不知怎的,在这个过程中,我的问题消失了,所以我被引导相信这是我的设置或系统的问题。

感谢所有提供帮助和指导的人!

答案 1 :(得分:0)

试试这个......

LayoutInflater inflater;
inflater = activity.getLayoutInflater();
mForecastItem = (LinearLayout)inflater.inflate(
                R.layout.weather_forecast_item, null);



((ImageView)mForecastItem.findViewById(R.id.weather_forecast_icon))
                 .setImageDrawable(getBaseContext().getResources().getDrawable(R.drawable.weather_sunny));

答案 2 :(得分:0)

试试这段代码:

String inflater = Context.LAYOUT_INFLATER_SERVICE;
    LayoutInflater li = (LayoutInflater)ctx.getSystemService(inflater);
    v = li.inflate(R.layout.icon, null);