- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的应用程序中有一个 autoCompleteTextView,当用户完成输入时,它会检查其 afterTextChanged 方法,并根据用户输入的代码将用户重定向到下一个详细信息页面,但问题是当用户从详细信息页面返回时,它会再次切换到详情页。 afterTextChanged 方法每次都会调用。我在 onCreatedView 方法中调用了它。我怎样才能防止它。请帮忙。
代码:
actSearchCode.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
//do nothing
String product_code = actSearchCode.getText().toString();
Log.e("TAG", "afterTextChanged: " );
if(getCodeType.equals("art")) {
if (actSearchCode.getText().length() != 0 && actSearchCode.getText().length() >= 5) {
singleProductDetailList = databaseHelper.getProductByArtCode(product_code);
if (singleProductDetailList.size() != 0) {
Fragment fragment = new ProductDetailFragment();
FragmentManager fragmentManager = getFragmentManager(); // this is basically context of the class
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("product_art", product_code);
bundle.putString("source_type", "ean");
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
} else {
singleUnrecognisedCheck = new ArrayList<>();
singleUnrecognisedCheck = databaseHelper.getUnrecognisedByCode(product_code);
Vibrator vibrator = (Vibrator) getActivity().getSystemService(getActivity().VIBRATOR_SERVICE);
vibrator.vibrate(1000);
MediaPlayer mp = MediaPlayer.create(getActivity(), R.raw.beep);
mp.start();
if (singleUnrecognisedCheck.size() == 0) {
getDialog();
} else {
Toast.makeText(getActivity(), R.string.unrecognised_code_has_been_added, Toast.LENGTH_SHORT).show();
}
}
}
}
else{
if (actSearchCode.getText().length() != 0 && actSearchCode.getText().length() >= 13) {
singleProductDetailList = databaseHelper.getProductByArtCode(product_code);
if (singleProductDetailList.size() != 0) {
Fragment fragment = new ProductDetailFragment();
FragmentManager fragmentManager = getFragmentManager(); // this is basically context of the class
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("product_art", product_code);
bundle.putString("source_type", "ean");
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
} else {
singleUnrecognisedCheck = new ArrayList<>();
singleUnrecognisedCheck = databaseHelper.getUnrecognisedByCode(product_code);
Vibrator vibrator = (Vibrator) getActivity().getSystemService(getActivity().VIBRATOR_SERVICE);
vibrator.vibrate(1000);
MediaPlayer mp = MediaPlayer.create(getActivity(), R.raw.beep);
mp.start();
if (singleUnrecognisedCheck.size() == 0) {
codeValue = 1;
getDialog();
} else {
Toast.makeText(getActivity(), R.string.unrecognised_code_has_been_added, Toast.LENGTH_SHORT).show();
}
}
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//do nothing
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.length() != 0) {
imgClose.setVisibility(View.VISIBLE);
imgSourceClose.setVisibility(View.GONE);
} else {
imgClose.setVisibility(View.GONE);
imgSourceClose.setVisibility(View.VISIBLE);
}
}
});
// article code start
modelProductCodeList.clear();
productCodeList.clear();
if (getCodeType.equals("art")) {
modelProductCodeList = databaseHelper.getProductsArticleCode();
for (int k = 0; k < modelProductCodeList.size(); k++) {
productCodeList.add( modelProductCodeList.get(k).getArticle_code());
}
actSearchCode.setAdapter(null);
adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, android.R.id.text1, productCodeList);
actSearchCode.setAdapter(adapter);
}
rgGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
if (i == R.id.rdbArticleCode) {
actSearchCode.setText("");
getCodeType = "art";
modelProductCodeList = databaseHelper.getProductsArticleCode();
databaseHelper.close();
productCodeList.clear();
for (int k = 0; k < modelProductCodeList.size(); k++) {
productCodeList.add(modelProductCodeList.get(k).getArticle_code());
}
actSearchCode.setAdapter(null);
adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, android.R.id.text1, productCodeList);
actSearchCode.setAdapter(adapter);
} else if (i == R.id.rdbEANCode) {
actSearchCode.setText("871128");
getCodeType = "ean";
modelProductCodeList = databaseHelper.getProductsEANCode();
databaseHelper.close();
productCodeList.clear();
for (int k = 0; k < modelProductCodeList.size(); k++) {
productCodeList.add(modelProductCodeList.get(k).getEan_code());
Log.e("TAG", "onCheckedChanged: "+modelProductCodeList.get(k).getEan_code() );
}
actSearchCode.setAdapter(null);
adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_list_item_1, android.R.id.text1, productCodeList);
actSearchCode.setAdapter(adapter);
}
}
});
actSearchCode.setThreshold(3);
actSearchCode.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(actSearchCode.getApplicationWindowToken(), 0);
Fragment fragment = new ProductDetailFragment();
FragmentManager fragmentManager = getFragmentManager(); // this is basically context of the class
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("product_art", (String) adapterView.getItemAtPosition(i) );
bundle.putString("source_type", getCodeType);
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
最佳答案
final static boolean flag=false;//define this in the class before on create/on createView
----------
actSearchCode.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
//do nothing
if(!flag)
{
Log.e("TAG", "afterTextChanged: " );
if(getCodeType.equals("art")) {
if (actSearchCode.getText().length() != 0 && actSearchCode.getText().length() >= 5) {
singleProductDetailList = databaseHelper.getProductByArtCode(product_code);
if (singleProductDetailList.size() != 0) {
flag=true;
Fragment fragment = new ProductDetailFragment();
FragmentManager fragmentManager = getFragmentManager(); // this is basically context of the class
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Bundle bundle = new Bundle();
bundle.putString("product_art", product_code);
bundle.putString("source_type", "ean");
fragment.setArguments(bundle);
fragmentTransaction.replace(R.id.frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
}else{
flag=false;
}
关于android - AutoCompleteTextView 函数 afterTextChanged 每次调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53042682/
当用户点击 ACTV 并找到他正在搜索的内容时,他再次选择 ACTV 的唯一原因是搜索其他内容。我正在寻找一种方法,当用户在 ACTV 中进行搜索并且搜索文本位于 ACTV 字段中(建议菜单已关闭)时
当我单击 AutoCompleteTextView 的建议时,我希望光标移动到下一个可用的 EditBox 或 AutoCompleteTextView。 我在下面附上了我的布局和我的应用图像文件。在
我有一个 AppCompatAutoCompleteTextView,其 anchor 比 AppCompatAutoCompleteTextView 更靠下。这是设计使然,无法更改。当我在下拉菜单上
我正在使用 3 个 AutocompleteTextViews 来建议来自数据库的条目。我对 AutocompleteTextView 进行了子类化处理,以便在单击时将默认文本设置为 null,并在移
我正在使用 AutoCompleteTextView 创建下拉菜单。如何删除列表顶部和底部的默认边距? 重新创建: List dropdownItems
我正在尝试让 TextWatcher 与 AutoCompleteTextView 一起工作,但遇到了一些问题。我面临的问题是,当我开始输入文本时,如果数据输入的长度只有一个字符,我在 AutoCom
即使我没有在下拉列表项布局中设置边距,下拉列表也带有左右边距。我希望它与 autocompletetextview 的宽度相匹配。我怎样才能做到这一点? 这是我的 AutoCompleteTextVi
我的应用实现了一个 HashMap,这样当在 AutoCompleteTextView editText 中键入 key 时,并且用户单击下拉项,该值将显示在textView上。 唯一的问题是,单击的
这里是 Android 菜鸟,之前是 iOS、.Net、C 和 Fortran。 如果我有一个带有 1000 多个字符串的 ArrayAdapter,我如何修改 AutoCompleteTextVie
嗨,我刚刚开始学习 android Studio,我想要一个 AutoCompletetextView 和一个按钮,如果用户输入未在数组列表中列出,则添加用户输入。我的 AutoCompleteTex
我正在开发一个使用 AutoCompleteTextView 的应用程序,但遇到了一些问题。请在下面查找问题的详细信息。 数据中存在以下值: 1)曼尼什·洛根·杰恩 2)M.J.(洛根·费恩) 3)洛
我正在尝试根据另一个 View (微调器)中选择的选项来更改 AutoCompleteTextView 的建议列表。不幸的是,这个 TextView 的适配器似乎没有从另一个 View 的 setOn
我有这个布局: 使用这种风格: @color/text_input_layout_outlined_box_stroke @color/green_2 我试图在自动
我正在尝试使用 AutoCompleteTextView 进行过滤,但过滤器出现问题。它返回 ArrayList 中的所有项目,而不是过滤后的项目。下面是我的代码: Filter nameFilte
我想制作一个 AutoCompleteTextview ,它将从内部存储加载以前保存的建议。我成功地将字符串从内部存储加载到字符串数组(我使用日志记录来检查......)。 然后,当我将字符串数组加载
我有一个 AutoCompleteTextView,我想在它上面设置一个过滤器,我遇到的问题是当我去输入一些东西时它只会让我在文本字段中输入 1 个字符。如果我从代码中删除 textView.setF
我有两个自动完成 TextView 例如,如果任何人选择自动完成 TextView “HUB ID”位置#3,则另一个自动完成 TextView “HUBName”必须强制位于位置 3即希望它们都处于
您好 Android 开发人员, 我有一个关于自动完成 TextView 的问题。我在平板电脑上开发,我很好地定制了它。当我在平板电脑上运行它时,它看起来像这样: 这实际上是我想要的 - 所有可见的东
我正在处理一项要求,其中使用自动完成 TextView 来获取匹配的Localities。用户必须输入几个字符,然后从服务器返回与这些字符匹配的 Localities 列表。自动完成 TextView
使用 Bootstrap 的 Web 应用程序,有这样的输入区域。 在 Android 中有没有像这样实现 EditText 的库? 最佳答案 是的,完成的泡泡在Android中被称为“筹码”。工作解
我是一名优秀的程序员,十分优秀!