简体   繁体   English

一个不起作用的按钮

[英]A Button which does not work

I am trying to make a quiz app in Android Studio 1.5 and my title screen "Begin" Button does not work. 我正在尝试在Android Studio 1.5中创建测验应用程序,但标题屏幕的“开始”按钮不起作用。
It is supposed to lead from the MainActivity to the second Activity named questionone. 它应该从MainActivity转到第二个名为Questionone的Activity。

Here is the Button from the layout: 这是布局中的按钮:

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

Here is the code from my MainActivity Java file: 这是我的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();
        }

    }

}

Here is also my Android Manifest file: 这也是我的Android清单文件:

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

Your problem is that you have put android:onClick="toDo" twice, and so buttonBegin is never used. 你的问题是,你已经把android:onClick="toDo"两次,依此buttonBegin从未使用过。


As an alternative, I would recommend this after you remove any android:onClick from the XML 或者,从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;
        }
    }
}

Also, based on the Activity name "questionone", I would strongly suggest you avoid the thought that you need one new Activity per question. 另外,基于活动名称“ questionone”,我强烈建议您避免认为每个问题需要一个新的活动。

You only need one generic Activity to display any question . 您只需要一个通用活动即可显示任何问题

In your MainActivity , I would recommend implementing an OnClickListener ... 在您的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!
        }
    }

}

your Button xml is wrong, change it like below:(onClick field is changed from toDo to buttonBegin) 您的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" />

Your button will newer call "buttonBegin(View v)" because in his XML you set "toDo(View v)" in onClick attribute. 您的按钮将被更新为“ buttonBegin(View v)”,因为在其XML中,您在onClick属性中设置了“ toDo(View v)”。

So you should make it look like this: 因此,您应该使它看起来像这样:

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

But better and cleaner idea to accomplish what you want is setting onClickListener on your button. 但是更好和更清洁的想法来实现您想要的是在按钮上设置onClickListener。 Something like this: 像这样:

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

If user clicks on you button then code inside onClick(View v){ //code } will run. 如果用户点击您的按钮,则onClick(View v){// code}中的代码将运行。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM