如何创建一个创建onTextChangedListener的类,并允许程序员设置不同的行为

时间:2014-07-18 17:00:47

标签: android polymorphism listeners

对于长瓷砖很抱歉,但我不知道我怎么会问。

我正在使用andoroid进行编程,我想要一个简单的方法来执行以下操作,而不必使用一堆覆盖和丑陋的代码:

这些都是例子:

  • 当editText1被更改时,我希望使用用户输入的内容的副本更新TextView editText2与editText10相同。
  • 当editText11被更改时,我想将其中的数字乘以10并将其放入某些TextView中。
  • 当editText12变为0时,我想要隐藏一些LinearLayouts

基本上我希望能够轻松设置一个监听器并修改监听器将触发的方法,而不需要一堆匿名内部类和其他令人讨厌的东西。有许多衍生工具,每个都做自己预定义的事情是可以的,但我想避免重复代码并使其利用多态性。

我非常努力地使用接口,抽象方法和其他类似的技术,但这让我的头脑变得疯狂。

2 个答案:

答案 0 :(得分:0)

您可能想要的是TextWatcher

How to use the TextWatcher class in Android?

以下是一个例子:

http://www.learn-android-easily.com/2013/06/using-textwatcher-in-android.html

您可以将TextView对象传递到其中,并监视用户输入的文本文本。但是,根据您描述的要求和一般用户的一般不可预测行为,即使这可能相当复杂。

答案 1 :(得分:0)

为什么不为具有事件监听器回调的自定义TextWatcher尝试这样的事情,您可以在文本更改后使用该回调:

public class CustomTextWatcher implements TextWatcher {

    public interface TextChangedEventListener{
        public void afterTextChanged(String newText);
    }

    private TextChangedEventListener eventListener;

    public CustomTextWatcher(TextChangedEventListener eventListener){
        this.eventListener = eventListener;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

    }

    @Override
    public void afterTextChanged(Editable s) {
        eventListener.afterTextChanged(s.toString());
    }
}

现在实施......

EditText editText = (EditText)findViewById(R.id.my_et);
editText.addTextChangedListener(new CustomTextWatcher(new CustomTextWatcher.TextChangedEventListener() {
    public void afterTextChanged(String newText) {
        // set the text of the next EditText, which will trigger the next TextWatcher in the chain
    }
}));

你仍然需要处理一个匿名的内部类,但如果你想为每个EditText定制,那么就没有办法解决这个问题。至少这会将内部类的数量从3减少到1并清理你需要查看的代码。