在我的应用程序中,我有一个ListActivity和一个自定义布局。在自定义布局中,我有一个ImageView和一个TextView。
我希望能够根据我的应用中的某些条件代码更改ImageView资源。但是,当我尝试image.setImageResource(resource);
时,我得到javaNullPointerException。我已尝试将代码段放在不同的位置,例如在适配器之后。有没有人有任何想法?提前谢谢。
另外,在使用ImageView image = (ImageView) findViewById(R.id.image);
编辑:
在我的活动中:
setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, DlistArray));
// Here I want to change the image
ImageView celebIcon = (ImageView) findViewById(R.id.icon);
celebIcon.setImageResource(R.drawable.phil);
ListView celebList = getListView();
registerForContextMenu(getListView());
celebList.setTextFilterEnabled(true);
在我的布局中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:cacheColorHint="#00000000"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:padding="10dp"
android:src="@drawable/alan" />
<TextView
android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_gravity="center_vertical"
android:text="@+id/label"
android:textColor="#ffffff"
android:textSize="20dp" />
</LinearLayout>
答案 0 :(得分:1)
使用自定义适配器:
setListAdapter(new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, R.id.label, yourItems){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if( convertView == null ){
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item, null);
}
ImageView image = (ImageView) findViewById(R.id.icon);
image.setImageResource(R.drawable.phil);
return convertView;
}
});
(如果你想重复使用它,你也可以创建自己的类扩展arrayadapter)
要设置文本视图,只需在getView()方法中添加代码,就像图像设置代码一样。
答案 1 :(得分:0)
在您的情况下,我认为您需要编写自定义适配器(take a look here)。
代码:
(ImageView) findViewById(R.id.icon);
正在主要布局中寻找ImageView,这就是为什么它找不到它。