java - Android应用程序由于button.setOnClickListener(this)而关闭

标签 java android onclicklistener

我正在学习有关 Android 应用程序开发的教程。我一直都很好地完成了这一切,但由于某种原因,当我运行此 Activity 时,应用程序关闭并说它已停止工作。据我所知,我已经正确复制了该人的代码,但他的作品。 我发现问题出在 onCreate 中的一行 tryCmd.setOnClickListener(this);

如果我注释掉这一行,该 Activity 就可以正常工作(但显然,当我单击按钮时不会执行任何操作)。该应用程序可以与切换按钮的 onClickListener 语句配合使用。谁能告诉我出了什么问题吗?谢谢。

这是我的activity.java中的所有代码:

package com.example.testapp;

import java.util.Random;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.InputType;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ToggleButton;

public class Text extends Activity implements View.OnClickListener{

    EditText input;
    Button tryCmd;
    ToggleButton passTog;
    TextView display;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.text);
        //Call the method to assign variables to the elements.
        assignVariables(); 
        //Initialize the button and ToggleButton to work with the onClick method.
        passTog.setOnClickListener(this);
        tryCmd.setOnClickListener(this);        

    }

    private void assignVariables() {
        // TODO Auto-generated method stub
        input = (EditText) findViewById(R.id.etCommands);
        Button tryCmd = (Button) findViewById(R.id.bResults);
        passTog = (ToggleButton) findViewById(R.id.tbPassword);
        display = (TextView) findViewById(R.id.tvResults);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch(v.getId()){
        case R.id.bResults:
            String check = input.getText().toString();
            if (check.contentEquals("left")){
                display.setGravity(Gravity.LEFT);
            }else if(check.contentEquals("center")){
                display.setGravity(Gravity.CENTER);
            }else if(check.contentEquals("right")){
                display.setGravity(Gravity.RIGHT);
            }else if(check.contentEquals("blue")){
                display.setTextColor(Color.BLUE);
            }else if(check.contains("WTF")){
                Random crazy = new Random();
                display.setText("WTF!?!?");
                display.setTextSize(crazy.nextInt(75));
                display.setTextColor(Color.rgb(crazy.nextInt(255), crazy.nextInt(255), crazy.nextInt(255)));
                switch(crazy.nextInt(3)){
                case 0:
                    display.setGravity(Gravity.LEFT);
                    break;
                case 1:
                    display.setGravity(Gravity.CENTER);                     
                    break;
                case 2:
                    display.setGravity(Gravity.RIGHT);                      
                    break;
                }
            }else{
                display.setText("invalid");
                display.setTextColor(Color.BLACK);
                display.setGravity(Gravity.CENTER);
            }

            //Clear the input box if it doesn't contain WTF.
            if(!check.contains("WTF")){
                input.setText("");
            }
            break;

        case R.id.tbPassword:
            if (passTog.isChecked()){
                input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
            } else{
                input.setInputType(InputType.TYPE_CLASS_TEXT);
            }
            break;
        }
    }

}

最佳答案

您正在将 tryCmd 初始化为局部变量。 并在全局变量 tryCmd

上设置 onClickListner

从此行删除按钮

Button tryCmd = (Button) findViewById(R.id.bResults);

并改变它

tryCmd = (Button) findViewById(R.id.bResults);

关于java - Android应用程序由于button.setOnClickListener(this)而关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25820449/

相关文章:

java - SetUniqueList、HashSet 和 Set 不会从对象列表中删除重复项

java - 使用 Spring RestTemplate 遵循 302 重定向?

java - 使用AtomicLong生成ID,如何每天从0开始

android - 尝试在 android 上使用 phonegap 插件时未定义 window.plugins

java - 在特定时间使用警报管理器

Android 如何对同一个按钮同时使用 OnClick 和长按(3 秒)

java - 在尝试创建 JFileChooser——公共(public)变量?

java - 对话框中的 EditText 值

java - 为多个按钮添加多个点击监听器

Android - OnClickListener 和 OnLongClickListener 问题