android onClickListener(新手)

时间:2013-08-05 16:10:47

标签: android

我从书中复制了以下代码。当我运行应用程序时,它无法启动。

违规行为aboutButton.setOnClickListener(this);。如果我把它敲出来,应用就可以了。

任何线索?

感谢。

-G。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    View aboutButton = findViewById(R.id.main_about_button);
    aboutButton.setOnClickListener(this);
    setContentView(R.layout.activity_main);
}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:gravity="center"
    tools:context=".MainMenu"  
    >

    <TextView 
        android:id="@+id/welcome_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textStyle="bold"
        android:textSize="25sp"
        android:text="@string/welcome_title"
        />

    <Button
        android:id="@+id/search_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/search_button"
        />

    <Button
        android:id="@+id/new_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/new_button"
        />

    <Button
        android:id="@+id/help_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/help_button"
        />

    <Button
        android:id="@+id/exit_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/exit_button"
        />

   <Button 
        android:id="@+id/main_about_button"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/exit_button"
        android:layout_alignLeft="@+id/exit_button"
        android:text="@string/main_about_button"
        android:clickable="true"
        />

</LinearLayout>

3 个答案:

答案 0 :(得分:2)

aboutButtonnull。在夸大layout之前,您无法对其进行初始化。将其更改为

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);   // Switch these two lines
    View aboutButton = findViewById(R.id.main_about_button);
    aboutButton.setOnClickListener(this);

}

Views中存在layout,这意味着如果您在使用nulllayoutlayout inflater充气之前尝试初始化setContentView(),则会NPE致电listener,在尝试为他们调用某个功能或设置{{1}}时提供{{1}}

答案 1 :(得分:1)

必须将监听器语句 AFTER 放在seContentView命令中。修好了。

我的猜测是,setContentView导入所有变量&amp;来自布局的ID。并且findViewById只返回一个空指针或其他东西。

如果有人能证实我的猜测,我会很感激。

答案 2 :(得分:0)

我建议你将aboutButton声明为Button。试试这个:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button aboutButton = (Button) findViewById(R.id.main_about_button);
    aboutButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // Do something
        }
    });

}

我希望它有所帮助!