OnClickListener行上的Android Null指针异常

时间:2011-01-03 17:37:38

标签: android

我有一个简单的测试应用程序,其中GridView包含一系列按钮,我正在尝试触摸其中一个按钮执行操作(任何操作)。

主要代码是:

package com.example.convert;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.GridView;

public class convert extends Activity {
    //private ListView List;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        String [] elenco = {
                "ciao","questo","è","un esempio","Configurazione"
                };

        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.oggetto,R.id.testogg,elenco);
        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(arrayAdapter);
        Button btn = (Button) (findViewById(R.id.testogg));


        btn.setOnClickListener(new OnClickListener(){
              @Override
              public void onClick(View v) {
                  setContentView(R.layout.oggetto);
              }

            });

    }

}

main.xml如下:

<?xml version="1.0" encoding="utf-8"?>

<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:columnWidth="90dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

oggetto.xml包含以下几行:

<?xml version="1.0" encoding="utf-8"?>

<Button
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:text="@+id/TextView01"
    android:layout_width="80dp"
    android:layout_height="80dp"
    android:id="@+id/testogg">
</Button>

但是当我尝试运行该应用程序时,它会在NullPointerException行返回btn.setOnClickListener(new OnClickListener())

可能是因为按钮具有相同的ID?如果是这种情况,我怎样才能获得具有不同ID的重复按钮?

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  

可能是因为按钮发生了   具有相同的ID

那可能是。但如果情况确实如此,它也表明出现了问题。 XML中指定的每个按钮仅创建一次。您不能通过多次调用findViewById()或传入资源ID来创建多个按钮。

但问题来了,因为你打电话给setContentView(R.layout.main);

findViewById()将仅返回main.xml中包含的视图的非空视图。您的上下文对您的其他XML布局一无所知,因为它们不会被夸大。

你应该从更简单的程序开始,并通过教程来了解android视图的工作原理。

答案 1 :(得分:1)

你想要完成什么?您最初设置的布局只包含一个GridView,然后您尝试找到一个甚至不存在的Button(在错误行,您的内容视图是您的main.xml文档,它不包含任何按钮,更不用说具有testogg id的人了。这意味着btn为空,因为该按钮不存在。这是你的NullPointerException的原因。

如果要截取GridView中项目的click事件,则需要使用OnItemClickListener并将其附加到GridView。请参阅onItemClick方法定义的链接。