好吧这可能看起来像一个毫无意义的例子,但如果我能弄清楚这一点,那么我想要制作的程序就可以了。所以我有两个活动测试,并用一个按钮测试两个。
测试1:
package thompson.cameron.com;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class Test extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
View button = findViewById(R.id.testButton);
button.setOnClickListener(this);
}
public void onClick(View v){
Intent i = new Intent(this, Test2.class);
startActivity(i);
}
}
和test2
package thompson.cameron.com;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class Test2 extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
View test = findViewById(R.id.testButton);
test.setOnClickListener(this);
}
public void onClick(View v){
switch (v.getId()){
case R.id.testButton:
System.exit(1);
}
}
}
当我单击Test上的按钮时,它应该启动test2但是此时我得到一个空指针异常,我已经缩小到test.setOnClickListener(this);
代码行。下面是我layout
的两个xml文件。当我只有一个活动时,我可以让按钮工作,但只要我添加第二个activity
并使用不同的layout
文件,它就会崩溃
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/testButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TEST TEST TEST"/>
</LinearLayout>
main2.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/testButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TEST2 TEST2 TEST2"/>
</LinearLayout>
我仍然是Android编程的新手,所以感谢您的帮助。
答案 0 :(得分:2)
在test.java文件中给出:
implements View.OnClickListener
将按钮初始化为:
Button testButton = (Button) findViewById(R.id.testButton);
并在你的onClick方法中,检查你是否点击了按钮:
if(v == testButton) {
//give ur intent code
}
执行onClick功能有多种方法。 一个是我提到的上述方法。 另一个是ankit提到的。 第三种方式是通过你的布局。
在您的按钮标记的布局中,您可以指定为:
<Button android:id="@+id/testButton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Click" android:onClick="onTestButtonClick" />
在课堂上只需提及按钮的以下详细信息:
public void onTestButtonClick(View view) {
//give your intent code
}
您也可以参考链接: http://android-developers.blogspot.com/2009/10/ui-framework-changes-in-android-16.html
答案 1 :(得分:2)
Debug perspective
Eclipse
Add Java Exception Breakpoint
”并选择
NullPointerException
。activity
调试器通过DDMS运行实例。NullPointerException
。 答案 2 :(得分:1)
确保两个活动都在应用程序的清单文件中注册。
作为旁注,请勿在代码中调用System.exit。您可以调用finish()来关闭一个Activity,这将在前面的堆栈上显示上一个Activity。
答案 3 :(得分:1)
这里的问题是你没有对按钮进行类型转换。
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; // Needed to add this import for the button casting below
public class Test extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// I have changed View to Button and then typecasted
// with the "(Button)" the return of findViewById
Button button = (Button) findViewById(R.id.testButton);
button.setOnClickListener(this);
}
public void onClick(View v){
Intent i = new Intent(this, Test2.class);
startActivity(i);
}
}
如果您对此有任何疑问,请与我们联系。我刚刚通过主类而不是单独的匿名侦听器使用onClickListener实现完成了我的第一个实验。
安德鲁
答案 4 :(得分:1)
我遇到了同样的问题,你可能会把相同的内容视图放在按钮上, 的setContentView(R.layout.main);如果按钮位于该内容视图中,则在其他情况下,您将放置:
setContentView(R.layout.buttoncontentview);
View button = findViewById(R.id.testButton);
button.setOnClickListener(this);
public void onClick(View v){
Intent i = new Intent(this, Test2.class);
startActivity(i);
}
setContentView(R.layout.main);
抱歉我的英语不好,但我是西班牙语
答案 5 :(得分:1)
实施OnClickListener
界面
并设置button.setOnClickListener(this);
并覆盖
public void onClick(View v) {
}
答案 6 :(得分:0)
我认为您的按钮ID在不同的活动中需要有所不同。 R.id.testButton只会指一个按钮。
答案 7 :(得分:0)
你可以试试这个。它可能有用。
package thompson.cameron.com;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
public class Test extends Activity{
private Button button;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = findViewById(R.id.testButton);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent i=new Intent().setClass(Test.this,Test2.class);
startActivity(i);
}
});
}
}
答案 8 :(得分:0)
最终的解决方案是你可以修改AndroidManifest.xml文件,我终于在这个链接中解决了我的错误How to register a new activity in AndroidManifest.xml?
答案 9 :(得分:0)
首先在main.xml和main2.xml中修改按钮的ID,如下面的代码所示。
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/testButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TEST TEST TEST"/>
</LinearLayout>
main2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/testButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TEST2 TEST2 TEST2"/>
</LinearLayout>
它会抛出nullpointerexception,因为id会相互混淆,所以在你的java文件中使用下面的代码来查找按钮。
在活动1中
Button button = findViewById(R.id.testButton);
button.setOnClickListener(this);
和 在活动2中
Button button = findViewById(R.id.testButton1);
button.setOnClickListener(this);