我正在尝试在Android Studio 1.5中制作测验应用程序,但我的标题屏幕"开始"按钮不起作用。
它应该从主活动引导到名为问题一的第二个活动。
这是布局中的按钮:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Begin"
android:id="@+id/begin"
android:layout_marginTop="45dp"
android:layout_below="@+id/textView"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView"
android:clickable="true"
android:background="#ffffff"
android:onClick="toDo" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Exit"
android:id="@+id/exit"
android:layout_marginTop="27dp"
android:layout_below="@+id/begin"
android:layout_alignLeft="@+id/begin"
android:layout_alignStart="@+id/begin"
android:clickable="true"
android:onClick="toDo"
android:background="#ffffff" />
以下是我的 MainActivity Java 文件中的代码:
package com.example.noot_a_normal_pc.kmtomiles;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import static android.widget.Toast.makeText;
public class MainActivity extends AppCompatActivity {
Button buttonBegin, buttonExit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonBegin = (Button) findViewById(R.id.begin);
buttonExit = (Button) findViewById(R.id.exit);
}
public void buttonBegin (View view){
Intent intent = new Intent (this, question.class);
startActivity(intent);
}
public void toDo(View v) {
if (v.equals(buttonExit)) {
Toast.makeText(getApplicationContext(), "Why would you want to exit such a great app?", Toast.LENGTH_LONG).show();
}
}
}
这也是我的安卓清单文件:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".questionone">
</activity>
</application>
</manifest>
你的问题是你已经把android:onClick="toDo"
放了两次,所以buttonBegin
从来没有被使用过。
作为替代方案,在您从 XML 中删除任何android:onClick
后,我建议您这样做
public class MainActivity extends AppCompatActivity
implements View.OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.begin).setOnClickListener(this);
findViewById(R.id.exit).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.begin:
// handle begin
break;
case R.id.exit:
// handle exit
break;
}
}
}
此外,根据活动名称"questionone",我强烈建议您避免为每个问题需要一个新活动的想法。
您只需要一个通用活动即可显示任何问题。
在您的MainActivity
中,我建议实现一个OnClickListener
...
package com.example.noot_a_normal_pc.kmtomiles;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import static android.widget.Toast.makeText;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button buttonBegin, buttonExit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonBegin = (Button) findViewById(R.id.begin);
buttonBegin.setOnClickListener(this);
buttonExit = (Button) findViewById(R.id.exit);
buttonExit.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.equals(buttonExit)) {
Toast.makeText(getApplicationContext(), "Why would you want to exit such a great app?", Toast.LENGTH_LONG).show();
}
else if (v.equals(buttonBegin)) {
//run your app!
}
}
}
你的 Button xml 是錯誤的,像下面一樣改用它:(onClick 字段從 toDo 改為 buttonBegin(
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Begin"
android:id="@+id/begin"
android:layout_marginTop="45dp"
android:layout_below="@+id/textView"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView"
android:clickable="true"
android:background="#ffffff"
android:onClick="buttonBegin" />
你的按钮将调用"buttonBegin(View v(",因为在他的XML中,你在onClick属性中设置了"toDo(View v("。
所以你应该让它看起来像这样:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Begin"
android:id="@+id/begin"
android:layout_marginTop="45dp"
android:layout_below="@+id/textView"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView"
android:clickable="true"
android:background="#ffffff"
android:onClick="buttonBegin" />
但是,实现您想要的更好,更干净的想法是在按钮上设置ClickListener。像这样:
buttonBegin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent (this, question.class);
startActivity(intent);
}
});
如果用户单击您的按钮,则 onClick(View v({//code } 中的代码将运行。