- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的应用程序中添加了 AutoCompleteTextView。我在其中对这两种方法进行了编码,即 afterTextChange() 如果一个人写了完整的单词并且不点击建议和 OnItemClickListener() 如果用户点击 sugesstion 但问题是这两种方法一起工作。如果我使用 onItemClick 单击建议,那么 afterTextChange( ) 也可以工作并且我的代码运行两次。如何防止两种方法不同时运行。
OnAfterTextChange()代码
actvShop_name.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
actvShop_name.setVisibility(View.VISIBLE);
txtShop.setVisibility(View.GONE);
//do nothing
if ((actvShop_name.getText().length() != 0) && actvShop_name.getText().length() >= 3) {
modelShopDetailsArrayList = databaseHelper.getShopDetail(actvShop_name.getText().toString(), language);
Log.e("TAG", "onKeyDown:Add " + modelShopDetailsArrayList.size() + " " + actvShop_name.getText().toString() + language);
if (modelShopDetailsArrayList.size() != 0) {
HashMap<String, String> shopDetails = session.getSelectedShopDetail();
Log.e("TAG", "onItemClick: " + shopDetails.get("shop_name_nl") + " ");
if (shop_name != null) {
if (shop_name == actvShop_name.getText().toString()) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(actvShop_name.getApplicationWindowToken(), 0);
fillShopDetails(actvShop_name.getText().toString());
} else {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
alertDialog.setMessage(R.string.delete_cart);
alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
databaseHelper.deleteCart();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(actvShop_name.getApplicationWindowToken(), 0);
fillShopDetails(actvShop_name.getText().toString());
}
});
alertDialog.setNegativeButton(R.string.no
, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
} else {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(actvShop_name.getApplicationWindowToken(), 0);
fillShopDetails(actvShop_name.getText().toString());
}
OnItemClickListener() 代码
actvShop_name.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
// actvShop_name.removeTextChangedListener(textWatcher);
shop_name_entered = adapterView.getItemAtPosition(i).toString();
actvShop_name.setVisibility(View.GONE);
txtShop.setVisibility(View.VISIBLE);
txtShop.setText(shop_name_entered);
HashMap<String, String> shopDetails = session.getSelectedShopDetail();
Log.e("TAG", "onItemClick: " + shopDetails.get("shop_name_nl") + " " + shop_name_entered);
if (shop_name != null) {
if (shop_name.equals(shop_name_entered)) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(actvShop_name.getApplicationWindowToken(), 0);
fillShopDetails(shop_name_entered);
} else {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity());
alertDialog.setMessage(R.string.delete_cart);
alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
databaseHelper.deleteCart();
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(actvShop_name.getApplicationWindowToken(), 0);
fillShopDetails(shop_name_entered);
}
});
alertDialog.setNegativeButton(R.string.no
, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}
} else {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(actvShop_name.getApplicationWindowToken(), 0);
fillShopDetails(shop_name_entered);
}
}
});
actvShop_name.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
actvShop_name.setVisibility(View.VISIBLE);
txtShop.setVisibility(View.GONE);
}
});
txtShop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
actvShop_name.setVisibility(View.VISIBLE);
txtShop.setVisibility(View.GONE);
}
});
对话框打开了两次,因为这两种方法同时运行。
最佳答案
我遇到了你现在面临的同样问题。
当我们使用 addTextChangedListener
时,当您的 EditText
发生任何更改时,无论是通过键入还是以编程方式设置文本(例如从中选择一个值),它都会触发列表,然后在 Edittext 上设置)
您可以使用这两种方法。
addTextChangedListener
监听器。为此点击here AutoCompleteTextView
上创建一个新 View (您可以创建 TextView)并将 View 的可见性设置为 GONE默认情况下,我们将以编程方式播放 View 可见性,就像在 addTextChangedListener
中使用下面的代码代码:
@Override
public void afterTextChanged(Editable s) {
//do nothing
YOUR_AUTO_COMPLTE_TEXTVIEW.setVisibility(View.VISIBLE);
YOUR_TEXTVIEW.setVisibility(View.GONE);
}
在 setOnItemClickListener
中,我们需要再次播放 View 可见性,如下所示,并在新的 Textview
上设置设置文本,检查如下:-
actvShop_name.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
YOUR_AUTO_COMPLTE_TEXTVIEW.setVisibility(View.GONE);
YOUR_TEXTVIEW.setVisibility(View.VISIBLE);
}
}
然后点击 YOUR_AUTO_COMPLTE_TEXTVIEW 和 YOUR_TEXTVIEW 来设置 View 可见性,如下所示
YOUR_AUTO_COMPLTE_TEXTVIEW.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
YOUR_AUTO_COMPLTE_TEXTVIEW.setVisibility(View.VISIBLE);
YOUR_TEXTVIEW.setVisibility(View.GONE);
}
});
YOUR_TEXTVIEW.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
YOUR_AUTO_COMPLTE_TEXTVIEW.setVisibility(View.VISIBLE);
YOUR_TEXTVIEW.setVisibility(View.GONE);
}
});
关于android - 自动完成 TextView : AfterTextChange and OnItemClick working together,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53932216/
我在 onItemSelect 中有一些修改 EditText 的代码,但在此之前我删除了它的 TextWatcher。不管怎样,在我修改 EditText 后立即调用 afterTextChange
我试图设置它,以便当我在 EditText 字段中输入内容时,它会更改文本颜色并将变量设置为输入数字的值。但是,当我从字段中删除字符时,它会触发关闭应用程序的错误。我想我可能需要找到一个不依赖于长度的
text.addOnTextChanged(new TextWatcher() { @Override public void afterTextChanged(Editable s) {
我试图实现 Textwatcher 接口(interface),我试图在 afterTextChanged() 中更改文本,但它崩溃了。为什么会崩溃? : @Override
我无法在 Edittext 中添加两位数并计算最终价格。我对一位数字没有任何问题。但是当我想添加两位数时我的应用程序关闭了。 edt_value.addTextChangedListener(
我发现每次 EditText 文本更改时都会调用 afterTextChanged() (这就是它崩溃的原因),但我不知道如何解决问题。谁能帮帮我! 设置编辑文本并添加addTextChangedLi
问题是 adapter 设置后我无法更新。对于第一个字符,它工作正常,但如果我想更改它,adapter 会继续查看相同的建议。如何更新适配器?这是我的代码。 public class UzActivi
我正在使用 TextWatcher 来监听按键输入。当用户键入“@”时,我会打开一个列表 Activity ,用户必须从列表中进行选择。选择后,我将所选项目的文本(包括初始@)放置到编辑文本中,然后继
我有一个带有 EditText 的 fragment ,在 onCreateView() 内我将 TextWatcher 添加到 EditText. 每次第二次添加 fragment 时,都会调用 a
输入法管理器 https://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html 在中文输
我的代码: fractionNumEt.addTextChangedListener(new TextWatcher() { boolean ignoreChange = fa
我的应用程序中有一个 autoCompleteTextView,当用户完成输入时,它会检查其 afterTextChanged 方法,并根据用户输入的代码将用户重定向到下一个详细信息页面,但问题是当用
我有一个扩展 TextWatcher 以检测某些 EditText 中的变化的 Activity,因此它实现了: public void afterTextChanged(Editable s) 我的
我有一个 EditText,我想当用户键入除 之外的非数字字符时, edittext 删除该字符 。 例如,我希望 editText 接受文本像这样:5451,56589,7545 当用户输入一个非数
我有一个 EditText,我正在向其中设置一个错误或在文本更改后消除错误。但是,当我尝试从 afterTextChanged() 方法访问 EditText 时,我遇到了NPE。 phone_num
我使用以下代码将 Uri 图像插入到 SQLite 中: 注册 private void insertData( String name,String pass, Uri image) throws
什么情况下应该使用afterTextChanged而不是onTextChanged,反之亦然? 最佳答案 这些事件按以下顺序调用: beforeTextChanged(CharSequence s,
我在我的应用程序中添加了 AutoCompleteTextView。我在其中对这两种方法进行了编码,即 afterTextChange() 如果一个人写了完整的单词并且不点击建议和 OnItemCli
目前,我需要在 EditText 中捕获最终出现的文本。 这是我的简单代码。 主 Activity .java public class MainActivity extends AppCompatA
我有一个方法 drawItems(),它每次都会创建一个新布局并将其设置为 contentView。而且我还有一个控件 EditText,它应该在内容更改时删除其他元素。 edit.addTextCh
我是一名优秀的程序员,十分优秀!