我正在使用自定义适配器与AutoCompleteTextView.它在模拟器和我的平板电脑上工作正常.但是,我的手机在横向模式下出现问题.在此模式下显示的自动完成提示是对象信息而不是文本.但是,当我选择任何项目时,字段会在相应字段中正确填充文本.
基于Android Stock Array Adapter的其他字段的自动完成工作正常.
我必须在自定义适配器中为此做些什么吗?我在SO上只看到了一个类似的问题.对该问题的一个回答是讨论覆盖toString方法,但我无法理解它在我的代码中实现.
任何指导将不胜感激?如果您需要更多信息,请与我们联系.
编辑:添加了我的自定义适配器源代码....
public class Part_Mstr_Info
{
private long part_id;
private String name, desg, org, dept;
public Part_Mstr_Info(long part_id, String name, String desg, String org, String dept)
{
this.part_id = part_id;
this.name = name;
this.desg = desg;
this.org = org;
this.dept = dept;
}
public long get_part_id() { return part_id; }
public String get_name() { return name; }
public String get_desg() { return desg; }
public String get_org() { return org; }
public String get_dept() …Run Code Online (Sandbox Code Playgroud) 对话框弹出窗口位于此处.
自动完成结果如何停在弹出视图的到底是在这里.
我希望结果从对话框的视图下拉到父视图.如果我不能这样做,那么我想限制AutoComplete给我两个结果的数量.
这是我弹出菜单的单击监听器.
addDialog.setContentView(R.layout.shoppinglistadd);
/**Capture the AutoCompleteTextView widget*/
final AutoCompleteTextView autoCompleteTV
= (AutoCompleteTextView) addDialog.findViewById(R.id.productEnteredShop);
/**Fills the autocomplete with possibilities*/
String[] acArray = getResources().getStringArray(R.array.completeFoodsList);
/**Create a new ArrayAdapter and bind shoppinglistitem.xml to each list item*/
ArrayAdapter<String> autoCompleteAdapter
= new ArrayAdapter<String>(ShoppingList.this, R.layout.shoppinglistitem, acArray);
/**Associate the adapter with textView*/
autoCompleteTV.setAdapter(autoCompleteAdapter);
Run Code Online (Sandbox Code Playgroud) 我正在开发一个自动完成文本视图,它可以在一个关键值系统上工作,我正在尝试找出我需要做什么来使publishResults工作,因为调试器中传递给publishResults的结果参数在这里是正确的,但是我不知道它应该对应什么或如何使它显示结果,任何人都可以帮忙吗?此对象的创建位于另一个文件中,如下所示:
autoCompleteBox.setAdapter(new AutoCmpAdapter(this, android.R.layout.simple_dropdown_item_1line));
Run Code Online (Sandbox Code Playgroud)
其余的代码如下:
public class AutoCmpAdapter extends ArrayAdapter<String> implements Filterable {
protected Filter filter;
protected ArrayList<String> items;
protected ArrayList<String> res;
String lWds[] = { "HOMER", "TOM" };
String sWds[] = { "SIMPSON", "JONES" };
public AutoCmpAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
filter = new PhysFilter();
res = new ArrayList<String>();
}
public Filter getFilter() {
return filter;
}
private class PhysFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults f = new FilterResults();
res.clear();
if (constraint …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中有一个时刻,我需要强制显示建议列表中的所有项目,无论用户输入了什么.我怎样才能做到这一点?
我试图用过滤做一些事情,但对于我来说,初学者过滤太复杂了,我尝试搜索初学者教程进行过滤而没有任何运气.也许,有一种更简单的方法可以强制显示所有建议项目?
编辑:基本上我的想法是,当用户键入不在列表中的内容时,它会显示他可以拥有的所有可用选项.
我已经找到了检查天气的最佳方式,ACTV是否显示,但onTextChangeEvent我将用户输入的文本与我的列表进行比较,然后如果没有找到任何元素显示完整列表.
public void onTextChanged(CharSequence s, int start, int before, int count)
{
final EditText editText = (EditText) findViewById(R.id.vardsUserInput);
String strValue = editText.getText().toString().toUpperCase();
String temp;
int Cc=0; //my count variable
for(int i=0; i<vardi.length; i++)
{
temp = vardi[i].toUpperCase();
if(temp.startsWith(strValue.toUpperCase()))
{
Log.d("testing",vardi[i]);
Cc++;
}
}
if(Cc == 0)
{
//Show all the available options
textView.showDropDown();
}
}
Run Code Online (Sandbox Code Playgroud) 我为AutoCompleteTextView编写了一个自定义Filter.它工作正常,但一件小事.performFiltering上的Constraint在第一个字符上为null.这意味着只有在将第二个字符放入AutoCompleteTextView时才会启动过滤进程.
这是Filter的代码:
private Filter nameFilter = new Filter() {
public String convertResultToString(Object resultValue) {
String fullName = ((User)(resultValue)).facebookName;
return fullName;
}
@Override
protected FilterResults performFiltering(CharSequence constraint) {
if(constraint != null) {
suggestions.clear();
for (User friend : allFriends) {
if(friend.facebookName.toLowerCase().contains(constraint.toString().toLowerCase())){
suggestions.add(friend);
}
}
FilterResults filterResults = new FilterResults();
filterResults.values = suggestions;
filterResults.count = suggestions.size();
return filterResults;
} else {
return new FilterResults();
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
ArrayList<User> filteredList = (ArrayList<User>) results.values;
if(results != null && …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个全宽度自动完整文本字段.
到目前为止,我认为我的文本字段本身看起来正确.问题在于自动完成弹出窗口.它周围有这个非常大胆的阴影,我无法摆脱它.
不要误解我,我仍然想要阴影,但是一个微妙的阴影,只在弹出窗口的底部,而不是周围的所有(特别是不在顶部,这真的很奇怪).
像这样的东西:
这是我的样子(抱歉巨像):
activity_main.xml中:
<AutoCompleteTextView
android:id="@+id/actvSearch"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginBottom="8dp"
android:background="@drawable/full_width_input"
android:completionThreshold="1"
android:hint="Search a movie..."
android:textColorHint="#BDBDBD"
android:elevation="0dp"
android:popupBackground="@android:color/white" />
Run Code Online (Sandbox Code Playgroud)
full_width_input.xml:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-1dp" android:right="-1dp" android:left="-1dp">
<shape android:shape="rectangle">
<padding android:bottom="20dp" android:top="20dp" android:left="16dp" android:right="16dp" />
<solid android:color="@android:color/white" />
<stroke android:width="1dp" android:color="#E0E0E0" />
</shape>
</item>
</selector>
Run Code Online (Sandbox Code Playgroud) 我一直在为AutoCompleteTextView创建自定义ArrayAdapter时遇到困难,尽管在互联网上找到以下代码,但仍会出现这样的错误:
因此,对于那些遇到或遇到与我相同问题的人,我建议使用BaseAdapter代替AutoCompleteTextView.
android autocompletetextview android-arrayadapter baseadapter
我有一个简单的应用程序,只包含一个AutoCompleteTextView(下面的代码).我有OnItemClickListener和OnItemSelectedListener定义.单击下拉建议中的各个项目会触发该onItemClick事件.但是,使用蓝牙键盘时,使用箭头键导航到给定项目似乎不会触发onItemSelected事件(此事件不会显示日志).
什么触发了这个onItemSelected事件?我的印象是highlight,其中一个下拉项目就是这样,但情况似乎并非如此.
如果OnItemSelectedListener不是突出显示项目的正确事件侦听器,是否满足此要求?
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java
public class MainActivity extends Activity {
String[] options = {"a1", "a2", "a3", "b1", "b2", "b3", "b4", "b5"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// An adapter object
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.select_dialog_item, options);
AutoCompleteTextView autoCompleteTextView = (AutoCompleteTextView)findViewById(R.id.autoCompleteTextView);
autoCompleteTextView.setAdapter(adapter);
autoCompleteTextView.setThreshold(1);
// Set …Run Code Online (Sandbox Code Playgroud) 我的活动中有一个AutoCompleteTextView,它可以执行它的运行方式.下拉弓显示正确的条目等.问题是当视图失去焦点时,文本不再可见.当再次获得焦点时,文本是可见的.
有没有其他人有这个问题?这是一个错误或我做错了什么?
我正在尝试使用 AutoCompleteTextView 实现 Material Design Chips,以便在用户单击自动完成建议(如 Gmail 收件人芯片)时在输入字段中添加联系人芯片。
可以在Material Design 网站上看到所需的行为。
我决定从头开始在我的项目中与 AutoCompleteTextView 一起实现 Chips,没有外部库。但是,我没有找到任何说明如何做到这一点的指南。
我尝试创建一个独立的 ChipDrawable,然后将其添加到 AutoCompleteTextView 中,如下所示:
布局
<chip
xmlns:app="http://schemas.android.com/apk/res-auto"
app:chipIcon="@drawable/ic_avatar_circle_24"
android:text="@string/contact_name"/>
Run Code Online (Sandbox Code Playgroud)
Java代码
ChipDrawable chip = ChipDrawable.createFromResource(getContext(), R.xml.standalone_chip);
chip.setBounds(0, 0, chip.getIntrinsicWidth(), chip.getIntrinsicHeight());
DrawableMarginSpan span = new DrawableMarginSpan(chip, 25);
Editable text = editText.getText();
text.setSpan(span, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有按预期工作。首先,我不能添加更多的芯片。此外,芯片的样式非常奇怪(高度太大,未居中)。
那么如何使用 Material Design Input Chips 创建 Gmail 或 SMS 应用程序中的 Contact Chips 呢?也许有人知道一些实施指南?
提前致谢,您的帮助将不胜感激!
android autocompletetextview material-design android-chips material-components