你知道为什么这会让我的申请意外关闭:
b2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
setContentView(R.layout.id_weather);
//getting image form url
try {
ImageView i = (ImageView)findViewById(R.id.weather_icon);
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("www.myimageurl.png").getContent());
i.setImageBitmap(bitmap);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Button b4=(Button)findViewById(R.id.button_weather10);
b4.setOnClickListener(new View.OnClickListener() {
public void onClick(View l) {
System.out.println("Yeah");
}
});
}
});
如果我注释掉第二个setOnClickListener,它就可以了。它就像一个SetOnClick内的setOnClick不起作用。
这是我的logcat:
Uncaught handler: thread main exiting due to uncaught exception
java.lang.NullPointerException
at com......MyScreen$2.onClick(MyScreen.java:133)
第133行是我的第二个点击
答案 0 :(得分:2)
我想如果你要从clickListener的声明中调用findViewById(),你必须明确地使用你的activity.this,如下所示:
Button b4=(Button)YourActivity.this.findViewById(R.id.button_weather10);
否则我认为它会尝试调用OnClickListener类的findViewById()方法,该方法不存在。
似乎你必须多次尝试调用setContentView()。
setContentView(R.layout.id_weather);
在b2的点击监听器中。但是,如果您尚未设置内容,那么您将无法单击按钮。如果您已经设置了一次内容,那么第二个应该失败。我想,你只能调用setContentView()。