4

我编写了一个代码来检查用户名和密码是否用于管理员...如果是,则重定向到管理员活动(Activity_2),否则将用户重定向到另一个活动(ac)...但是我的代码有问题,因为切换按钮的状态没有按我的意愿改变:\

在此处输入图像描述

这是我的主要活动代码:

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

            }

        }
    });


  }



}
4

3 回答 3

2

你把这个签入onCreate()方法,让它在开始时只执行一次。您需要TextWatcher为您创建EditTexts

TextWatcher tw = 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(final Editable s)
    {
        if(t1.getText().toString().equals("e") && t2.getText().toString().equals("123") ){
             b2.setEnabled(true);
             b2.setText("ON");
        } 
    }
});

t1.addTextChangedListener(tw);
t2.addTextChangedListener(tw);

这样,每次有人更改其中一个EditTexts 中的文本时,都会检查条件。

当然,您可以考虑一些更有效的方法,例如创建接受按钮,并在单击它时检查条件。但这取决于你。

于 2013-06-26T09:11:37.660 回答
0

编辑您需要在setChecked(true)内部添加,afterTextChanged否则您的代码将永远无法工作,因为b2.isChecked()总是会是false.

这是您的问题:onCreate仅在创建活动时调用该函数。

创建活动时,所有文本都是空的,因此检查 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);
于 2013-06-26T09:14:35.350 回答
-1

您正在 oncreate 中检查管理员用户名和密码,该操作在创建时调用。要检查用户输入的用户名和密码,请将该代码放入编辑文本的 ontextchanged 中。

if(t1.getText().toString().equals("e") && t2.getText().toString().equals("123") ){

                b2.setEnabled(true);
                b2.setText("ON");

            } 
于 2013-06-26T09:14:42.880 回答