我有一个简单的测试应用程序,其中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的重复按钮?
感谢您的帮助!
答案 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方法定义的链接。