我正在尝试使用和ArrayAdapter动态更新AutocompleteTextView的列表.为了更新此View,我使用TextWatcher监视AutocompleteTextView中可能发生的任何更改.
问题是列表根本没有更新,我无法理解为什么.我一直在互联网上寻找类似的东西,我发现了几种不同的方法,但我仍然无法理解为什么这个应该是最简单的方法,不起作用.任何解释都将非常感激.
目标AVD:Google API等级10,Android 2.3.3
这是简化的代码:
public class AutocompleteActivity extends Activity implements TextWatcher {
ArrayAdapter<String> adapter = null;
AutoCompleteTextView acTextView = null;
ArrayList<String> addresses = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.autocompleteview);
acTextView = (AutoCompleteTextView) findViewById(R.id.autocomplete_address);
adapter = new ArrayAdapter<String>(this, R.layout.listitem, addresses);
adapter.setNotifyOnChange(true);
acTextView.addTextChangedListener(this);
acTextView.setAdapter(adapter);
}
@Override
public void onTextChanged(CharSequence text, int start, int before, int after) {
try {
adapter.add("test");
}
catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) android dynamic autocompletetextview android-arrayadapter textwatcher
在我的Android应用程序中,我需要实现一个TextWatcher接口来实现onTextChanged.我遇到的问题是,我想用一些额外的字符串更新相同的EditText.当我尝试这样做时,程序终止.
final EditText ET = (EditText) findViewById(R.id.editText1);
ET.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
try
{
ET.setText("***"+ s.toString());
ET.setSelection(s.length());
}
catch(Exception e)
{
Log.v("State", e.getMessage());
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void afterTextChanged(Editable s)
{
}
});
Run Code Online (Sandbox Code Playgroud)
我的程序终止,甚至我尝试捕获异常,就像我的代码仍然终止.有谁知道为什么会发生这种情况以及如何实现这一目标?谢谢.
java android textwatcher android-edittext android-textwatcher
我正在使用TextWatcher验证我的输入,我希望我的红色提示图像可以点击,这样我就可以给用户提供视觉反馈,如下图所示.到目前为止,我输入的是当我输入无效数据时出现红色提示图像的编辑文本.我现在想知道如何使这个红色提示可点击并使弹出提示显示如图所示.

这是我到目前为止的代码,
public class MainActivity extends Activity implements TextWatcher{
EditText username,email = null;
boolean flag=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
username=(EditText) findViewById(R.id.usernametxt);
email=(EditText) findViewById(R.id.emailtxt);
username.addTextChangedListener(this);
username.setOnTouchListener(new View.OnTouchListener(){
public boolean onTouch(View view, MotionEvent motionEvent) {
// your code here...
if(flag)
{
email.setText("Error. . .");
}
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
return false;
}
});
Button loginbtn = (Button) findViewById(R.id.login);
loginbtn.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
//Check Validations
if(username.getText().toString().equalsIgnoreCase(""))
{
username.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.alert, 0);
flag=true;
} …Run Code Online (Sandbox Code Playgroud) 我正在使用TextWatcher来监听按键输入。当用户键入“ @”时,我打开一个listactivity,用户必须从列表中进行选择。选择之后,我将所选项目的文本(包括首字母@)放置到edittext中,然后继续进行正常的编辑。
问题是,当我按退格键时,在aftertextchanged事件中得到的字符串是错误的,并且再次弹出listactivity。
editText.addTextChangedListener(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)
{
String str = s.toString();
if (str.length() > 0)
{
if (str.substring(str.length() - 1).equals("@"))
{
Intent i = new Intent(MessageComposeActivity.this, MembersListActivity.class);
startActivityForResult(i, Util.MEMBERS_LIST);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
并在onActivityResult中:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode …Run Code Online (Sandbox Code Playgroud) 首先查看我的代码:
这些都在我的活动中;
EditText text1,text2; (Are defined corretly not problem)
text1.addTextChangedListener(new MyTextWatcher(onePercent));
text2.addTextChangedListener(new MyTextWatcher(twoPercent));
.. ..
.. ..
.. ..
private class MyTextWatcher implements TextWatcher {
private View view;
private MyTextWatcher(View view) {
this.view = view;
}
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2)
{}
public void afterTextChanged(Editable editable) {
String text = editable.toString();
switch(view.getId()){
case R.id.dis_one_percent: (this is text1)
if(!text.equel(""))
text2.setText(Double.toString(text));
break;
case R.id.dis_one_number: (and text2) …Run Code Online (Sandbox Code Playgroud) 我正在尝试根据我使用的背景设置自定义EditText.背景图像在入口区域之间有一些空格,因此我需要在字符之间留出一些空格(字距调整)以使它们适合它们.例如,在用户输入的每个字符之后,我需要在此之后放置4个空格.
到目前为止,我无法在网上找到任何解决方案,有些人建议使用TextWatcher,但我无法设法使其工作,因为我也想要它.
有人可以帮我吗?
谢谢
嗨,我正在编写一个edittext,其中我想要MM/YY格式的信用卡有效期.我想要实现的算法如下:如果用户输入从2到9的任何内容.我将文本输入更改为02 /到09 /如果用户输入1,那么我等待下一个数字并检查int值月份如果小于12.这是我的代码.
@Override
public void afterTextChanged(Editable s) {
String input = s.toString();
if (s.length() == 1) {
int month = Integer.parseInt(input);
if (month > 1) {
mExpiryDate.setText("0" + mExpiryDate.getText().toString() + "/");
mExpiryDate.setSelection(mExpiryDate.getText().toString().length());
mSeperator = true;
}
}
else if (s.length() == 2) {
int month = Integer.parseInt(input);
if (month <= 12) {
mExpiryDate.setText(mExpiryDate.getText().toString() + "/");
mExpiryDate.setSelection(mExpiryDate.getText().toString().length());
mSeperator = true;
}
}
else {
}
}
Run Code Online (Sandbox Code Playgroud)
这可以正常工作,直到我按下软键返回按钮.反斜杠永远不会回头.原因是第二个if条件总是满足.我很困惑如何解决这个问题.如何处理后面的后退按钮?请帮忙.
I noticed a strange behavior when I combine an InputFilter with a TextWatcher.
What I basically want to do is to help the user type a MAC address. First of all I want to add a separator (":") every two character the user types.
The code works as expected with my vanilla Nexus 7, but with my LG Optimus 4X HD (fair enough it has a nightly Cyanogenmod on it), but also with a stock Samsung …
我有一个EditText,我在那里听取文本的变化:
editText.addTextChangedListener(new TextWatcher() {
@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) {
// do stuff
}
});
Run Code Online (Sandbox Code Playgroud)
到目前为止这个工作正常,如果我在EditText中输入内容,就会执行afterTextChanged()中的内容.现在,在同一个活动中,我有一个ToggleButton,它可以改变EditText中的字符串.由于ToggleButton触发"afterTextChanged",如何防止此文本更改?
PS:不确定这是否相关,但具体来说我有一个接受小数或小数的EditText(例如"0.75"或"3/4"),切换按钮应在小数和小数显示之间切换,但不应触发任何内容在"afterTextChanged"中,因为值保持不变(3/4 = 0.75).
I needed to format money values entered into an EditText so I used a TextWatcher but now I have issues with backspace in soft keyboard.
Normally if you hold the backspace key in the keyboard, it keeps removing characters in EditText until there is nothing left. After adding the TextWatcher, you need to manually press the backspace button many times in order to completely get rid of all characters as holding it no longer works.
How do I …