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() только тогда, когда я думаю.

Другие вопросы по тегам