OnClick内部OnClick强制关闭

时间:2012-01-10 22:32:22

标签: android button 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 个答案:

答案 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()。