Java 安卓-错误线程和按钮仍然可以点击

Java 安卓-错误线程和按钮仍然可以点击,java,android,multithreading,click,thread-safety,Java,Android,Multithreading,Click,Thread Safety,读这个:我想喜欢这个。。。。如果用户输入名称并选择游戏类型。用户可以单击“确定”按钮。若用户并没有输入名称并选择游戏类型,他就不能点击“确定”按钮 我创建线程来解决这个问题。。。 但是当我运行这个应用程序时。我不能再访问此UI 方法“自动验证”中出现错误 和代码userConfigOK.setClickable(false)不起作用。我不知道为什么 顺便说一句,android很难 这是源代码: public class UserConfig extends Activity { private

读这个:我想喜欢这个。。。。如果用户输入名称并选择游戏类型。用户可以单击“确定”按钮。若用户并没有输入名称并选择游戏类型,他就不能点击“确定”按钮

我创建线程来解决这个问题。。。 但是当我运行这个应用程序时。我不能再访问此UI

方法“自动验证”中出现错误

和代码userConfigOK.setClickable(false)不起作用。我不知道为什么

顺便说一句,android很难

这是源代码:

public class UserConfig extends Activity {
private String gameType;
private String gameTime;
private String playerName;
private int IDChar = 0; 
Thread validation;

@Override
protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.user_config);
     userConfigOK.setClickable(false);
     inputName();
     chooseCharacter();
     setGameType();
     back();
     autoValidation();
     OK();
}

public void inputName() {
    playerName = userNameTextbox.getText().toString();
}

public void setGameType() {
    gameTypes.setOnItemSelectedListener(new OnItemSelectedListener() {

        @Override
        public void onItemSelected(AdapterView<?> adapterView, View arg1,
                int arg2, long arg3) {

            gameType = (String) gameTypes.getSelectedItem();
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {

        }
    });

}

public void OK() {
    userConfigOK.setOnClickListener( new OnClickListener() {
        @SuppressWarnings("deprecation")
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(UserConfig.this, EnemyConfig1.class);
            startActivity(intent);
            validation.stop();
        }
    });
}

public void autoValidation() {

    validation = new Thread(new Runnable() {
        @Override
        public void run() {

            if( ( !gameType.trim().equals("") ) && ( !playerName.trim().equals("") )  )
            {
                userConfigOK.setClickable(true);
            }

            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        } 
    });
    validation.start();

}
public类UserConfig扩展活动{
私有字符串游戏类型;
私人字符串游戏时间;
私人弦乐演奏者姓名;
私有int IDChar=0;
线程验证;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.user\u config);
userConfigOK.setClickable(错误);
inputName();
选择角色();
setGameType();
背();
自动验证();
OK();
}
public void inputName(){
playerName=userNameTextbox.getText().toString();
}
public void setGameType(){
游戏类型。setOnItemSelectedListener(新的OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView AdapterView,视图arg1,
整数arg2,长arg3){
gameType=(字符串)gameTypes.getSelectedItem();
}
@凌驾
未选择公共无效(AdapterView arg0){
}
});
}
公共无效OK(){
userConfigOK.setOnClickListener(新的OnClickListener(){
@抑制警告(“弃用”)
@凌驾
公共void onClick(视图arg0){
//TODO自动生成的方法存根
Intent Intent=new Intent(UserConfig.this,EnemyConfig1.class);
星触觉(意向);
validation.stop();
}
});
}
公共无效自动验证(){
验证=新线程(新可运行(){
@凌驾
公开募捐{
如果((!gameType.trim().equals(“”))和(&(!playerName.trim().equals(“”))
{
userConfigOK.setClickable(真);
}
试一试{
睡眠(100);
}捕捉(中断异常e){
e、 printStackTrace();
}
} 
});
validation.start();
}

}

您可以让onClickListener检查是否输入了任何文本,以及是否有从网格中选择的项目。如果用户没有选择任何内容,您可以制作一个Toast,提示用户输入所需的值。

您可以让onClickListener检查是否输入了任何文本,以及是否有从网格中选择的项目。如果用户没有选择任何内容,您可以制作一个Toast,提示用户输入所需的值。

您可以让onClickListener检查是否输入了任何文本,以及是否有从网格中选择的项目。如果用户没有选择任何内容,您可以制作一个Toast,提示用户输入所需的值。

您可以让onClickListener检查是否输入了任何文本,以及是否有从网格中选择的项目。如果用户没有选择任何内容,您可以制作一个祝酒词,提示用户输入所需的值。

试试这个

userConfigOK.setEnabled(false);
而不是

userConfigOK.setClickable(false);
试试这个

userConfigOK.setEnabled(false);
而不是

userConfigOK.setClickable(false);
试试这个

userConfigOK.setEnabled(false);
而不是

userConfigOK.setClickable(false);
试试这个

userConfigOK.setEnabled(false);
而不是

userConfigOK.setClickable(false);

将文本更改lisener设置为输入字段,而不是线程验证。我不明白。我是android新手,不用线程验证,而是将文本更改lisener设置为输入字段。我不明白。我是android新手,不用线程验证,而是将文本更改lisener设置为输入字段。我不明白。我是android新手,不用线程验证,而是将文本更改lisener设置为输入字段。我不明白。我是机器人新手