OnClick внутри OnClick принудительно закрыть - PullRequest
0 голосов
/ 11 января 2012

Знаете ли вы, почему это заставляет мое приложение неожиданно закрываться:

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 Ответ

2 голосов
/ 11 января 2012

Я думаю, что если вы собираетесь вызывать findViewById () из объявления clickListener, вам придется использовать вашу активность. Это явно, например так:

Button b4=(Button)YourActivity.this.findViewById(R.id.button_weather10);

В противном случае я думаюпопытаемся вызвать метод findViewById () класса OnClickListener, который не существует.

Также кажется, что вы должны пытаться вызывать setContentView () более одного раза.У вас есть

setContentView(R.layout.id_weather);

в вашем прослушивателе кликов для b2.Но если вы еще не установили контент, у вас не будет кнопки для нажатия.И если вы уже установили контент один раз, то второй должен потерпеть неудачу.Вы можете вызывать setContentView () только тогда, когда я думаю.

...