我有一个ListView
每行都有一个EditText
控制。我想添加一个TextChangedListener
到每一行;包含额外数据的数据,表明哪一行EditText
是在。问题是,作为getView
被呼叫,多次TextWatchers
已添加;因为convertView
已经有一个TextWatcher
(以及指向不同行的一个)。
MyTextWatcher watcher = new MyTextWatcher(currentQuestion);
EditText text = (EditText)convertView.findViewById(R.id.responseText);
text.addTextChangedListener(watcher);
MyTextWatcher
是我的类实现TextWatcher
;并处理文本事件。 CurrentQuestion 让我知道我正在对哪一行进行操作。当我在框中输入时;的多个实例TextWatcher
叫做。
有什么办法可以去除TextWatchers
在添加新的之前?我看到removeTextChangedListener
方法,但这需要特定的TextWatcher
被传入,我不知道如何获得指向TextWatcher
那已经在那里了。
使用当前的方法无法做到这一点EditText
直接接口。我看到两种可能的解决方案:
- 重新设计您的应用程序,以便您始终知道什么
TextWatcher
被添加到特定的EditText
实例。
- Extend
EditText
并添加清除所有观察者的可能性。
这是第二种方法的示例 -ExtendedEditText
:
public class ExtendedEditText extends EditText
{
private ArrayList<TextWatcher> mListeners = null;
public ExtendedEditText(Context ctx)
{
super(ctx);
}
public ExtendedEditText(Context ctx, AttributeSet attrs)
{
super(ctx, attrs);
}
public ExtendedEditText(Context ctx, AttributeSet attrs, int defStyle)
{
super(ctx, attrs, defStyle);
}
@Override
public void addTextChangedListener(TextWatcher watcher)
{
if (mListeners == null)
{
mListeners = new ArrayList<TextWatcher>();
}
mListeners.add(watcher);
super.addTextChangedListener(watcher);
}
@Override
public void removeTextChangedListener(TextWatcher watcher)
{
if (mListeners != null)
{
int i = mListeners.indexOf(watcher);
if (i >= 0)
{
mListeners.remove(i);
}
}
super.removeTextChangedListener(watcher);
}
public void clearTextChangedListeners()
{
if(mListeners != null)
{
for(TextWatcher watcher : mListeners)
{
super.removeTextChangedListener(watcher);
}
mListeners.clear();
mListeners = null;
}
}
}
这是您可以使用的方法ExtendedEditText
在 xml 布局中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ua.inazaruk.HelloWorld.ExtendedEditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="header"
android:gravity="center" />
</LinearLayout>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)