1

我正在尝试打开一项新活动。当我这样做时,我得到一个空指针异常。一切正常,直到执行以下代码。

    Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);

这是更好地查看代码。

public class DisplayTests extends ListActivity {
    private DbManagement mdbManager;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //mdbManager = new DbManagement(this);
        //mdbManager.open();
        Button RmTests =(Button)findViewById(R.id.btnRmTests);
        RmTests.setOnClickListener(AnsRmTest);

        //fillData();
    }
    private OnClickListener AnsRmTest = new OnClickListener(){

        @Override
        public void onClick(View v) {
            try{                
              System.out.println("fart");
            }
            catch(Exception ex){
              System.out.println(ex.toString());
            }
        }       
    };

我不确定为什么活动在创建按钮时会爆炸。

这里也是 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <FrameLayout
        android:id="@+id/frameLayout1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" >

        <ListView
            android:id="@+id/listView1"
            android:layout_width="match_parent"
            android:layout_height="194dp" >
        </ListView>
    </FrameLayout>

    <Button
        android:id="@+id/btnNewExam"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:text="@string/strNewExam" />

    <Button
        android:id="@+id/btnRmExams"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnRmTests"
        android:layout_alignBottom="@+id/btnRmTests"
        android:layout_alignParentRight="true"
        android:text="@string/strRmExams" />

    <Button
        android:id="@+id/btnRmTests"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnNewExam"
        android:layout_alignBottom="@+id/btnNewExam"
        android:layout_toLeftOf="@+id/btnRmExams"
        android:text="@string/strRmTest" />

</RelativeLayout>

话虽如此,我是以下代码

setContentView(R.layout.moretime);

当我这样做时,我收到以下错误:java.lang.RuntimeException:您的内容必须有一个 id 属性为 'android.R.id.list' 的 ListView

如您所见,我确实有一个列表视图,但它称为 listView1,我不确定为什么会收到此错误消息。提前致谢。

4

6 回答 6

0

您需要先将布局的内容设置为活动,然后再初始化视图。

   privae Button RmTests;
   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mylayout); // missing
    RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);
    ... // rest of the code 
   }     

您可以findViewById将当前视图层次结构设置为活动。由于您尚未将内容设置为活动,因此当您初始化按钮时,您会得到NullPointerException.

ListActivity具有默认布局,由屏幕中央的单个全屏列表组成。但是,如果您愿意,您可以通过在 onCreate() 中使用 setContentView() 设置您自己的视图布局来自定义屏幕布局。为此,您自己的视图必须包含一个 ID 为“@android:id/list”的 ListView 对象(如果它在代码中,则为列表)

在你的 xml 替换

 <ListView
        android:id="@+id/listView1"

经过

 <ListView android:id="@android:id/list"

你还需要一个FrameLayout吗?为什么不在相对布局中只有列表视图和按钮。

http://developer.android.com/reference/android/app/ListActivity.html

编辑:

从下面的评论

您可以执行以下操作

public class MainActivity extends ListActivity {
String s[] = {"A","B","C","D","E"};
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item, s);
    setListAdapter(adapter);

}
}

ListActivity具有默认布局,由屏幕中央的单个全屏列表组成。但是,如果您愿意,您可以通过在 onCreate() 中使用 setContentView() 设置您自己的视图布局来自定义屏幕布局

如果您需要其他视图,那么您可以在 xml 扩展中定义它们,ListActivity在这种情况下,您需要使用 id 为"@android:id/list"的列表视图。就像我可以在按钮上有一个列表和一个按钮。所以我需要一个 id 为 "@android:id/list"的列表视图。

于 2013-07-22T05:05:55.673 回答
0

我认为在onCreate你忘记给的方法里面的活动setContentView

在初始化 UI 组件之前,您必须在方法内为活动设置onCreate视图

IEsetContentView(R.layout.yourxml)

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.yourxml);
    //mdbManager = new DbManagement(this);
    //mdbManager.open();
    Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);
    //fillData();
}

附加信息

此外,由于您正在使用ListActivty,您必须提供 listview id 作为

<ListView android:id="@android:id/list"
          android:layout_width="match_parent"
          android:layout_height="194dp" />

否则会导致另一个错误

于 2013-07-22T05:06:10.100 回答
0

您在哪里告诉您的活动应该加载哪个 xml?

尝试:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //mdbManager = new DbManagement(this);
    //mdbManager.open();
    Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);

    //fillData();
}

用您的 xml 文件标题替换“R.layout.main”。例如,如果它是 Main_Layout.xml,则将其替换为“R.layout.Main_Layout”

于 2013-07-22T05:08:31.337 回答
0

setContentView(R.layout.your_layout);

super.onCreate(savedInstanceState);

于 2013-07-22T05:08:59.353 回答
0

尝试在 setContentView(R.layout.your_layout_name);之后添加super.onCreate(savedInstanceState);

于 2013-07-22T05:09:37.340 回答
0

您必须设置 setContentView 。这是代码

protected void onCreate(Bundle savedInstanceState) {

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_name);
Button RmTests =(Button)findViewById(R.id.btnRmTests);
    RmTests.setOnClickListener(AnsRmTest);

        }
于 2013-07-22T05:10:47.090 回答