一个不起作用的按钮



我正在尝试在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 } 中的代码将运行。

最新更新