我写了一个代码来检查用户名和密码是否为管理员...
如果是,则重定向到管理 Activity (Activity_2),否则将用户重定向到另一个 Activity (ac)...
但是我的代码有问题,因为切换按钮的状态没有按照我的意愿改变:\
这是我的主要 Activity 代码:
package com.example.task_7;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.ToggleButton;
public class MainActivity extends Activity {
Button b1;
ToggleButton b2;
EditText t1,t2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button) findViewById(R.id.login);
b2=(ToggleButton) findViewById(R.id.isAdmin);
t1=(EditText) findViewById(R.id.userName);
t2=(EditText) findViewById(R.id.password);
b2.setChecked(false);
b2.setEnabled(false);
if(t1.getText().toString().equals("e") && t2.getText().toString().equals("123") ){
b2.setEnabled(true);
b2.setText("ON");
}
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i;
if(b2.isChecked()) {
i = new Intent(getApplicationContext(), Activity_2.class);
i.putExtra("UserName", t1.getText().toString());
i.putExtra("Password", t2.getText().toString());
startActivity(i);
}
else {
i = new Intent(getApplicationContext(), ac.class);
i.putExtra("UserName", t1.getText().toString());
startActivity(i);
}
}
});
}
}
最佳答案
编辑 您需要在 setChecked(true)
中添加 afterTextChanged
,否则您的代码将永远无法运行,因为 b2.isChecked()
始终是 false
。
这是您的问题: onCreate
函数仅在创建 Activity 时调用。
创建 Activity 时,所有文本都是空的,因此检查 TextViews 是否填充了管理员用户名和密码没有任何意义。每次用户按下一个键时,您都必须检查它们。您可以通过向 TextViews 添加 addTextChangedListener()
来实现这一点,因此每次文本更改时都会调用监听器内的函数:
b1=(Button) findViewById(R.id.login);
b2=(ToggleButton) findViewById(R.id.isAdmin);
t1=(EditText) findViewById(R.id.userName);
t2=(EditText) findViewById(R.id.password);
TextWatcher listener = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
if(t1.getText().toString().equals("e") && t2.getText().toString().equals("123")){
b2.setChecked(true);
b2.setEnabled(true);
b2.setText("ON");
}
}
};
t1.addTextChangedListener(listener);
t2.addTextChangedListener(listener);