【问题标题】:A Button which does not work一个不起作用的按钮
【发布时间】:2017-04-08 22:41:56
【问题描述】:

我正在尝试在 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>

【问题讨论】:

  • 你设置onClick了吗
  • "Android Studio 1.5"??为什么你还没有升级到至少 2.2?

标签: java android android-button


【解决方案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;
        }
    }
}

此外,基于活动名称“questionone”,我强烈建议您避免每个问题都需要一个新活动的想法。

您只需要一个通用 Activity 即可显示任何问题

【讨论】:

    【解决方案2】:

    在您的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!
            }
        }
    
    }
    

    【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 另一个按钮的 xml 是什么?待办事项按钮?还有什么错误?显示堆栈跟踪。
    • 另一个按钮的xml是什么意思?
    • 你有“toDo”按钮吗?像您为“buttonBegin”发布的那样发布它的 XML
    【解决方案4】:

    您的按钮将更新为“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" />
    

    但更好、更简洁的想法是在按钮上设置 onClickListener 来完成您想要的操作。像这样的:

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

    如果用户点击你的按钮,那么 onClick(View v){ //code } 里面的代码就会运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多