Java 如何在android中持续检查文本更改事件?

Java 如何在android中持续检查文本更改事件?,java,android,Java,Android,我如何让我的应用程序不断检查这一点?意思是不断检查里面是否有文字 String str1, str2; str1 = word.getText().toString(); str2 = answer.getText().toString(); if(!(str1.equals("")) && !(str2.equals(""))) { teach.setEnabled(true); } else { teach.setEnabled(false); } 这是我的ja

我如何让我的应用程序不断检查这一点?意思是不断检查里面是否有文字

String str1, str2;

str1 = word.getText().toString();
str2 = answer.getText().toString();

if(!(str1.equals("")) && !(str2.equals("")))
{
  teach.setEnabled(true);
}
else
{
  teach.setEnabled(false);
}
这是我的java代码,我会把固定的代码放在哪里,让它检查和所有事情??请帮忙

public class TeachmeDialog extends Activity implements OnClickListener {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.teachme);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    Button teach = (Button)findViewById(R.id.btn_teach_send);
    teach.setOnClickListener(this);


}



@Override
public void onClick(View v) {
    switch(v.getId())
    {
        case R.id.btn_teach_send:
        {
            // Create a new HttpClient and Post Header
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://monaiz.net/get.php");

            String responseStr = "";

            try {
                TextView word = (TextView)findViewById(R.id.tv_teach_request);
                TextView answer = (TextView)findViewById(R.id.tv_teach_response);

                // Add your data
                List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
                nameValuePairs.add(new BasicNameValuePair("word", word.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("answer", answer.getText().toString()));
                nameValuePairs.add(new BasicNameValuePair("action", "teach"));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity( );

                responseStr = EntityUtils.toString( entity );

            } catch (Exception e) {
                // TODO Auto-generated catch block
            }

            if( responseStr.equals("ok") )
            {
                Toast.makeText(getApplicationContext(), "Poco just learned a new word!", Toast.LENGTH_LONG).show();
                try {
                    this.finish();
                } catch (Throwable e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}
公共类TeachmeDialog扩展活动实现OnClickListener{
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
requestWindowFeature(窗口。功能\u无\u标题);
setContentView(R.layout.teachme);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u Picture);
按钮示教=(按钮)findViewById(R.id.btn\u teach\u send);
teach.setOnClickListener(this);
}
@凌驾
公共void onClick(视图v){
开关(v.getId())
{
案例R.id.btn\u教学\u发送:
{
//创建一个新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
HttpPost HttpPost=新的HttpPost(“http://monaiz.net/get.php");
字符串responsest=“”;
试一试{
TextView word=(TextView)findViewById(R.id.tv\u教学请求);
TextView答案=(TextView)findView答案(R.id.tv\u teach\u response);
//添加您的数据
List nameValuePairs=新的ArrayList(3);
添加(新的BasicNameValuePair(“word”,word.getText().toString());
添加(新的BasicNameValuePair(“answer”,answer.getText().toString());
添加(新的BasicNameValuePair(“动作”、“教学”));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
HttpResponse response=httpclient.execute(httppost);
HttpEntity=response.getEntity();
responsest=EntityUtils.toString(实体);
}捕获(例外e){
//TODO自动生成的捕捉块
}
如果(响应等于(“ok”))
{
Toast.makeText(getApplicationContext(),“Poco刚学了一个新单词!”,Toast.LENGTH\u LONG.show();
试一试{
这个;
}捕获(可丢弃的e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}
}

}在条件中使用while循环布尔值true,在循环中写入逻辑,在其中继续检查使用继续关键字,在其中停止检查使用中断关键字

使用while循环并在条件中使用布尔真,将逻辑写入其中,在其中您要继续检查的地方使用继续关键字,在那里您要停止检查使用中断关键字

你可以这样做:

String str1, str2;

while (true) 
{
    str1 = word.getText().toString();
    str2 = answer.getText().toString();

    if(!(str1.equals("")) && !(str2.equals("")))
    {
       teach.setEnabled(true);
       break;
    }
    else
    {
       teach.setEnabled(false);
    }
}

这将创建一个循环,该循环将继续检查某些条件。如果字符串不是空的,它将通过使用
break
关键字停止。也就是说,我不推荐这种方法,因为它很可能会影响您的UI。我建议您将焦点丢失事件附加到文本字段,并在焦点丢失时进行检查。这将允许您仅在需要时运行检查。

您可以这样做:

String str1, str2;

while (true) 
{
    str1 = word.getText().toString();
    str2 = answer.getText().toString();

    if(!(str1.equals("")) && !(str2.equals("")))
    {
       teach.setEnabled(true);
       break;
    }
    else
    {
       teach.setEnabled(false);
    }
}

这将创建一个循环,该循环将继续检查某些条件。如果字符串不是空的,它将通过使用
break
关键字停止。也就是说,我不推荐这种方法,因为它很可能会影响您的UI。我建议您将焦点丢失事件附加到文本字段,并在焦点丢失时进行检查。这将允许您仅在需要时运行检查。

我假设您希望在修改EditText的文本时执行某些操作。如果是这样,就使用

要使用此选项,请执行以下操作:

        word.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // do whatever you need to do HERE.
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });

我假设您希望在修改EditText的文本时执行某些操作。如果是这样,就使用

要使用此选项,请执行以下操作:

        word.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                // do whatever you need to do HERE.
            }
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void afterTextChanged(Editable s) {
            }
        });

改用
TextWatcher
。您的“单词”似乎是
EditText
。所以你可以这样做-

word.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
                  teach.setEnabled(true);
            }
    });

改用
TextWatcher
。您的“单词”似乎是
EditText
。所以你可以这样做-

word.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable s) {
                  teach.setEnabled(true);
            }
    });
在你的问题上 str1=word.getText().toString(); str2=answer.getText().toString()

意思是单词或答案是edittext或textview写下TextChanged的侦听器。

在你的问题中 str1=word.getText().toString(); str2=answer.getText().toString()


表示word或answer是edittext或textview write TextChanged侦听器。

检查其中是否有文本?但是在哪里呢?你到底想做什么?一个模棱两可的问题。请讲清楚。发布代码不发布问题。可能存在重复问题-检查其中是否有文本?但是在哪里呢?你到底想做什么?一个模棱两可的问题。请讲清楚。发布代码不会发布问题。可能存在重复问题-@amit我可以知道挂起背后的原因吗。而(true){}将一直运行,直到达到中断条件为止。。。然而1。OP希望在文本更改时(或发生焦点丢失事件,比文本更改事件更有效)进行检查,在这种情况下,听者将更适合其他答案中的建议。。2.UI therad将挂起直到循环完成…@amit我可以知道挂起背后的原因吗。而(true){}将运行直到达到中断条件。。。然而1。OP希望在文本更改时(或发生焦点丢失事件,比文本更改事件更有效)进行检查,在这种情况下,听者将更适合其他答案中的建议。。2.UI therad将一直挂起,直到循环完成