OnClick внутри OnClick принудительно закрыть
Знаете ли вы, почему это делает мое приложение неожиданно закрытым:
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 - мой второй при клике
1 ответ
Я думаю, что если вы собираетесь вызывать findViewById() из объявления clickListener, вам придется использовать вашу активность. Это явно, например, так:
Button b4=(Button)YourActivity.this.findViewById(R.id.button_weather10);
В противном случае я думаю, что он попытается вызвать метод findViewById() класса OnClickListener, который не существует.
Также кажется, что вы должны пытаться вызывать setContentView() более одного раза. У тебя есть
setContentView(R.layout.id_weather);
внутри слушателя щелчка для b2. Но если вы еще не установили контент, у вас не будет кнопки для нажатия. И если вы уже установили контент один раз, то второй должен потерпеть неудачу. Вы можете вызывать setContentView() только тогда, когда я думаю.