android中几个EditText的内容相关联的设置

两个EditText,其中一个值发生改变,另一个随之改变,这种效果一点没做好,两个EditText就会在TextWatcher方法中陷入死循环,下面是我自己写的一些代码:

text1 = (EditText) this.findViewById(R.id.edit1);

text2 = (EditText) this.findViewById(R.id.edit2);
textEN = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
text2.removeTextChangedListener(textTS);

//设置输入的数字为两位小数
if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + 3);
                        text1.setText(s);
                        text1.setSelection(s.length());
                    }
                }
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    text1.setText(s);
                    text1.setSelection(2);
                }
            if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                    text1.setText(s.subSequence(0, 1));
                    text1.setSelection(1);
                        return;
                    }
                }
                //设置EditText的内容
                if(!text1.getText().toString().trim().equals("") &&
                 null != text1.getText().toString().trim()){
                s1 = text1.getText().toString().trim();
                n1 = Float.parseFloat(s1);
                }
                text2.setText(getNumber2()+"");
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
text2.addTextChangedListener(textTS);
}
};

textTS = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
text1.removeTextChangedListener(textEN);
if (s.toString().contains(".")) {
                    if (s.length() - 1 - s.toString().indexOf(".") > 2) {
                        s = s.toString().subSequence(0,
                                s.toString().indexOf(".") + 3);
                        text2.setText(s);
                        text2.setSelection(s.length());
                    }
                }
                if (s.toString().trim().substring(0).equals(".")) {
                    s = "0" + s;
                    text2.setText(s);
                    text2.setSelection(2);
                }
                if (s.toString().startsWith("0")
                        && s.toString().trim().length() > 1) {
                    if (!s.toString().substring(1, 2).equals(".")) {
                    text2.setText(s.subSequence(0, 1));
                    text1.setSelection(1);
                        return;
                    }
                }   
                if(!text2.getText().toString().trim().equals("") &&
                 null != text2.getText().toString().trim()){
                s2 = text2.getText().toString().trim();
                n2 = Float.parseFloat(s2);   
                }   
                text1.setText(getNumber1()+"");
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
text1.addTextChangedListener(textEN);
}
};
text1.addTextChangedListener(textEN);
text2.addTextChangedListener(textTS);

private float getNumber1(){
return n-n2;
}
private float getNumber2(){
return n-n1;
}

做了好久才调通,希望能对同样遇到这类困难的人!

时间: 2024-10-21 06:46:50

android中几个EditText的内容相关联的设置的相关文章

Android中使用log4j输出log内容到sd卡

在android中,实现输出log内容到sd卡中的文件里面,做法是: 还是相对来说,log4j,算是好用. 1.下载android的log4j的库(的封装) 去:http://code.google.com/p/android-logging-log4j/ 下载对应的android-logging-log4j-1.0.3.jar,加到项目中. 2.再去下载所依赖的apache的log4j库 去:http://logging.apache.org/log4j/1.2/download.html 下

android 中遇到 imageView getWidth 始终为0 时 ,设置 setImageBitmap 的方法

先说说我的遇到的问题: 1. 我在activity里写一个 fragment 2.这个fragment里有个 imageView ,用于显示图片. 我使用 asyncTask获得图片,并准备在这个imageView 中显示该图片的缩略图,我准备使用  ThumbnailUtils.extractThumbnail 方法生成缩略图. 我们先看看ThumbnailUtils.extractThumbnail(source, width, height);  这个方法的参数   source 源文件(

android 中如何限制 EditText 最大输入字符数

方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用InputFilter 进行过滤 //editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20 [java] view plaincopy public class TextEditActivity exten

android中如何判断edittext中数据为空?

??今天写了一个简单的记忆便笺小程序,但是却发现在判断添加数据不能为空的时候,自己的代码总是不起作用. String titleStr = addtitle.getText().toString(); String contentStr = addcontent.getText().toString(); if (titleStr == null && contentStr == null) { Toast.makeText(this, "不能添加一个空数据", Toa

Android中如何实现EditText的自动换行

要实现EditText的自动换行需要实现如下设置: <EditText android:id="@+id/function_lifingcost_edit_txtRemark" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="@string/inputRemark" android:inputTyp

在 iView 的组件中使用 Render 函数渲染内容,可以通过设置 class 属性来自定义样式

下图所示一个Table组件的表头的 Render 内容,对其中的Checkbox组件设置名为 my-favor-features-checkbox 的 class 样式: 比如:下面的CSS将能够改变该 CheckBox 组件实例在 disabled 时的样式: 值得一提的是:通过给某个组件实例自定义一个独一无二的 class 样式名,即可以单独修改这个组件实例的样式,同时不影响当前项目中同类型的其它组件实例的样式,从页做到了样式的个性化. 原文地址:https://www.cnblogs.co

Android 中Message,MessageQueue,Looper,Handler详解+实例

一.几个关键概念 1.MessageQueue:是一种数据结构,见名知义,就是一个消息队列,存放消息的地方.每一个线程最多只可以拥有一个MessageQueue数据结构. 创建一个线程的时候,并不会自动创建其MessageQueue.通常使用一个Looper对象对该线程的MessageQueue进行管理.主线程创建时,会创建一 个默认的Looper对象,而Looper对象的创建,将自动创建一个Message Queue.其他非主线程,不会自动创建Looper,要需要的时候,通过调 用prepar

Android中使用log4j

在android中,实现输出log内容到sd卡中的文件里面,做法是: 1.导入者两个jar包 2.测试代码 import de.mindpipe.android.logging.log4j.LogConfigurator; import java.io.File; import android.os.Environment; import org.apache.log4j.Level; import org.apache.log4j.Logger;   public class BaseActi

备忘: Android中把EditText的输入内容转为大写

editText_SerialCode = (EditText) findViewById(R.id.editText_SerialCode); editText_SerialCode.addTextChangedListener(textWatcher); private TextWatcher textWatcher = new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int