2017-02-16 74 views
-1
package cppandi.apjquotes; 

import android.content.Intent; 
import android.os.CountDownTimer; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.widget.Button; 
import android.view.View; 

public class MainActivity extends AppCompatActivity { 
Button btn1; 
Button btn2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.front); 
btn1 = (Button) this.findViewById(R.id.quotes); 
btn2 = (Button) this.findViewById(R.id.about); 
new CountDownTimer(5000, 1000) { 

@Override 
public void onTick(long millisUntilFinished) { 
} 

@Override 
public void onFinish() { 
//set the new Content of your activity 
setContentView(R.layout.activity_main); 
} 
}.start(); 
btn1.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
// Perform action on click 
Intent i = new Intent(v.getContext(), quotes.class); 
startActivity(i); 
} 
}); 
btn2.setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) { 
// Perform action on click 
Intent i = new Intent(v.getContext(), about.class); 
startActivity(i); 
} 
}); 
}} 





<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="cppandi.apjquotes.MainActivity"> 

<Button 
android:text="@string/quotes" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignParentTop="true" 
android:layout_centerHorizontal="true" 
android:layout_marginTop="126dp" 
android:id="@+id/quotes" 
android:onClick="btnClickAct1"/> 
<Button 
android:text="@string/about" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_below="@+id/quotes" 
android:layout_alignLeft="@+id/quotes" 
android:layout_alignStart="@+id/quotes" 
android:layout_marginTop="94dp" 
android:id="@+id/about" 
android:layout_alignRight="@+id/quotes" 
android:layout_alignEnd="@+id/quotes" 
android:onClick="btnClickAct2"/> 
</RelativeLayout> 

在这里我得到“尝试的错误来调用虚拟方法无效android.widget。 Button.setOnClickListener(android.view.View $ OnClickListener)'对一个空对象引用“即使我已经defiend所有的按钮。试图调用虚拟方法无效android.widget.Button.setOnClickListener对空对象引用,即使我定义所有按键

+2

计时器是异步的。代码的其余部分将在定时器完成并设置您的布局之前执行。如果您想坚持这种方法,请在设置布局后在定时器完成内分配和设置按钮。 – Kushan

+1

请在提问时使用正确的缩进方式,这对每个人都很简单。 – 2017-02-16 17:32:29

+0

好吧,我已经正确缩进了,但问题没有发布,它要求为每行提供4个空格缩进。 – Chitrapandi

回答

0

您的按钮位于layout_main中。

您正在设置5秒后的主布局。在这一点和这一点上,只有布局被充实和设置。

如果您尝试在该点之前引用视图,则视图将返回空值。只有在定时器结束后才能分配您的按钮和监听器。在此之前,即使您使用findViewById,视图也会被分配为null,因为布局不会被夸大。

使用计时器更改像这样的布局可能不是一个好主意。我认为你正在寻找一个闪屏,而不是目前的方法。 Google启动画面显示应用尚未加载的时间。

+0

没有超时条件,我可以设置一个图像3-4秒,当应用程序开始。如果是这样,请举一个例子。 – Chitrapandi

+0

Google启动画面好友。这正是闪屏所做的。那么你应该只设置主布局而不需要定时器。 – Kushan

相关问题