错误“android(项目名称)意外停止

时间:2010-07-01 19:49:11

标签: android

package com.iperetz1.android.testbutton1;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class TestButton extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button test2 = (Button)findViewById(R.id.test2);      
        test2.setOnClickListener(new OnClickListener()
        {
           @Override
           public void onClick(View v) 
           {
               setContentView(R.layout.test2);;
           }
        });

        Button other = (Button)findViewById(R.id.backmain);      
        other.setOnClickListener(new OnClickListener()
        {
           @Override
           public void onClick(View v) 
           {
               setContentView(R.layout.main);;
           }
        });
    }
}

main.xls

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<Button
android:id="@+id/test2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test2"
android:layout_x="24px"
android:layout_y="165px"
>
</Button>
</AbsoluteLayout>

test2.xml

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
android:id="@+id/widget0"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<Button
android:id="@+id/backmain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="backmain"
android:layout_x="24px"
android:layout_y="165px"
>
</Button>
</AbsoluteLayout>

2 个答案:

答案 0 :(得分:1)

findViewById比人们认为的要简单得多。它遍历视图层次结构,查找具有给定ID的视图。如果找不到,findViewById将返回null。

您首先将内容视图设置为main布局,但稍后尝试findViewById(R.id.backmain)。由于主布局中没有该ID的视图,因此返回null。此时尝试other.setOnClickListener将失败。只有当按钮实际存在于视图层次结构中时,才能执行此操作。

动态更改视图层次结构没有任何内在错误,但如果你走这条路线,你将不得不以不同的方式处理。 (例如,当您将事件连接到onCreate期间不存在的视图时,就像您在上面尝试的那样。)

答案 1 :(得分:0)

正如@Cristian Castiblanco所说,动态更改视图会导致问题,对于这些场景,您必须创建单独的活动并使用意图调用它们并使用包在它们之间传递数据。