一个不起作用的按钮

时间:2017-04-08 22:41:56

标签: java android android-button

我正在尝试在Android Studio 1.5中制作一个测验应用,而我的标题屏幕“开始”按钮不起作用 它应该从MainActivity引导到名为questionone的第二个Activity。

以下是布局中的按钮:

<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();
        }

    }

}

这也是我的Android Manifest文件:

  <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>

5 个答案:

答案 0 :(得分:1)

您的问题是您已将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;
        }
    }
}

此外,根据活动名称&#34; questionone&#34;,我强烈建议您避免考虑每个问题需要一个新活动。

您只需要一个通用活动来显示任何问题

答案 1 :(得分:1)

public class Temp { static int i; int j; int sum = i+j; } public class Main{ public static void main(String[] args){ Temp obj = new Temp(); obj.i = 1; obj.j = 2; System.out.println(obj.sum); //returns '0' }} 中,我建议您实施MainActivity ...

OnClickListener

答案 2 :(得分:0)

您的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" />

答案 3 :(得分:0)

您的按钮会更新通话&#34; buttonBegin(查看v)&#34;因为在他的XML中你设置&#34; toDo(View v)&#34;在onClick属性。

所以你应该看起来像这样:

<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" />

但是更好更清洁的想法来完成你想要的是在你的按钮上设置onClickListener。像这样:

buttonBegin.setOnClickListener(new View.OnClickListener() {
         public void onClick(View v) {
             Intent intent = new Intent (this, question.class);
             startActivity(intent);
         }
     });

如果用户点击你的按钮,则onClick(View v){// code}内的代码将会运行。

答案 4 :(得分:-1)

试试这个

XML
<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"
 />



<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:background="#ffffff" />

和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);
}


buttonBegin.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
        //do here what you want to do
         }
     });

buttonExit.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
          //do here what you want to do
         }
     });
 }
}