Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 添加clickListener时应用程序崩溃_Android - Fatal编程技术网

Android 添加clickListener时应用程序崩溃

Android 添加clickListener时应用程序崩溃,android,Android,我有一个应用程序,在单击图像时设置contentView。这个程序从my main.xml加载options.xml settings.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { setContentView(R.layout.options); }

我有一个应用程序,在单击图像时设置contentView。这个程序从my main.xml加载options.xml

settings.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                 setContentView(R.layout.options);

            }

        });
但是,当我将侦听器添加到options.xml中的图像时,应用程序在启动时崩溃。我通过下面的代码引用图像,并显示我正在添加的clickListener

//ReturnHome is inside options.xml
//Adding this in my mainapp.java
 returnHome = (ImageView)findViewById(R.id.returnHome);
    returnHome.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {

            ***APP CRASHES EVERY TIME WHEN I ADD THIS****   
            }

    });

试图查看是否抛出了错误,但LogCat似乎没有显示任何内容。

findViewById
返回主页映像位于应用程序的上下文中

如果在应用程序中设置了
setContentView(R.layout.main)
当您调用
findViewById
时,它将查看
main.xml
中的图像
returnHome
,该图像显然不存在,因为它在
options.xml
上,因此您将得到一个NullPointerException,因为如果无法找到您要求它执行的操作

不要在main.xml的上下文中声明returnHome的图像侦听器,而是尝试在更改布局后执行此操作,可能是一种方法:

private void changeView()
{
    setContentView(R.layout.options);
    returnHome = (ImageView)findViewById(R.id.returnHome);
    returnHome.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v) 
        {
            // Perform whatever.....  
        }
    });
}
然后将第一个onclick侦听器更改为:

settings.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v) 
    {
        changeView();
    }
});

如果应用程序因该代码崩溃,LogCat将捕获99%(如果不是100)的异常。试着在那里放一个断点,看看是不是这一行导致了问题。我不知道如何调试,但LogCat正在捕获一些东西。它说下面120是我在.java.lang.NullPointerException上的代码行