在使用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");
答案 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);