我必须显示一个下拉列表,最近键入的文本时,用户编辑的文本。例如登录页面显示以前登录的用户
fcipmucu1#
您正在寻找AutoCompleteTextView http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
创建登录列表
当用户登录时,您需要将该登录保存到某种持久存储(数据库、文本文件)中。
创建自动补全列表
每次使用EditText登录创建表单时1.从数据库中提取以前的登录值1.用这些先前的登录值创建一个String数组1.从String数组创建数组适配器1.将阵列适配器连接到AutoCompleteTextView。
2izufjch2#
我只是在找不到解决方案后才实施的。我做了Gopher说的,但将其存储为私人偏好而不是文件。我还添加了一个if语句,以阻止该项目在列表中出现两次。
public void YOURSUBMITBUTTON(View view) { PrevItemsAutoComplete customitemname = (PrevItemsAutoComplete) findViewById(R.id.YOURTEXTVIEW); SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); editor.putString("customitemname",customitemname.getText().toString()); editor.commit(); customitemname.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, updatedropdown(5))); } public String[] updatedropdown(int listlength) { boolean itemalreadyinlist=false; SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); for(int i = 0; i<listlength; i++) { if (getPreferences(MODE_PRIVATE).getString("customitemname","").equals(getPreferences(MODE_PRIVATE).getString("recentlistitem"+String.valueOf(i),""))) { itemalreadyinlist=true; for(int j = i; j>0; j--) { editor.putString("recentlistitem"+String.valueOf(j),getPreferences(MODE_PRIVATE).getString("recentlistitem"+String.valueOf(j-1),"")); } editor.putString("recentlistitem0",getPreferences(MODE_PRIVATE).getString("customitemname","")); editor.commit(); break; } } if( !itemalreadyinlist) { for(int i = listlength-1; i>0; i--) { editor.putString("recentlistitem"+String.valueOf(i),getPreferences(MODE_PRIVATE).getString("recentlistitem"+String.valueOf(i-1),"")); } editor.putString("recentlistitem0",getPreferences(MODE_PRIVATE).getString("customitemname","")); editor.commit(); } String[] recentlist = new String[listlength]; for(int i=0;i<listlength;i++) { recentlist[i] = getPreferences(MODE_PRIVATE).getString("recentlistitem"+String.valueOf(i),""); } return recentlist; }
其中customitemname是包含输入的textview。当你点击一个按钮时,上面的代码就会被调用。如果您想知道PrevItemsAutoComplete是什么,它是一个扩展AutoCompleteTextView的自定义类。虽然它与后者一起工作,但我更喜欢前者。下面是一个例子:
import android.content.Context; import android.graphics.Rect; import android.util.AttributeSet; import android.widget.AutoCompleteTextView; public class PrevItemsAutoComplete extends AutoCompleteTextView { public PrevItemsAutoComplete(Context context) { super(context); } public PrevItemsAutoComplete(Context arg0, AttributeSet arg1) { super(arg0, arg1); } public PrevItemsAutoComplete(Context arg0, AttributeSet arg1, int arg2) { super(arg0, arg1, arg2); } @Override public boolean enoughToFilter() { return true; } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused){ setText(""); performFiltering("", 0); showDropDown(); } } }
PrevItemsAutoComplete是从原始版本修改而来的:https://stackoverflow.com/a/5783983/2066079。如果你选择使用这个类,请记住在xml中使用<your.namespace.PrevItemsAutoComplete ... />而不是<AutoCompleteTextView ... />。此外,您可能需要将customitemname.addTextChangedListener(this);添加到onCreate。
<your.namespace.PrevItemsAutoComplete ... />
<AutoCompleteTextView ... />
customitemname.addTextChangedListener(this);
5ssjco0h3#
使用AutocompleteTextView
lymgl2op4#
你可以使用AutoComplete TextView。但是你需要做一些改变,比如你必须维护以前日志用户的数组列表。
4条答案
按热度按时间fcipmucu1#
您正在寻找AutoCompleteTextView http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
创建登录列表
当用户登录时,您需要将该登录保存到某种持久存储(数据库、文本文件)中。
创建自动补全列表
每次使用EditText登录创建表单时
1.从数据库中提取以前的登录值
1.用这些先前的登录值创建一个String数组
1.从String数组创建数组适配器
1.将阵列适配器连接到AutoCompleteTextView。
2izufjch2#
我只是在找不到解决方案后才实施的。我做了Gopher说的,但将其存储为私人偏好而不是文件。我还添加了一个if语句,以阻止该项目在列表中出现两次。
其中customitemname是包含输入的textview。当你点击一个按钮时,上面的代码就会被调用。
如果您想知道PrevItemsAutoComplete是什么,它是一个扩展AutoCompleteTextView的自定义类。虽然它与后者一起工作,但我更喜欢前者。下面是一个例子:
PrevItemsAutoComplete是从原始版本修改而来的:https://stackoverflow.com/a/5783983/2066079。
如果你选择使用这个类,请记住在xml中使用
<your.namespace.PrevItemsAutoComplete ... />
而不是<AutoCompleteTextView ... />
。此外,您可能需要将
customitemname.addTextChangedListener(this);
添加到onCreate。5ssjco0h3#
使用AutocompleteTextView
lymgl2op4#
你可以使用AutoComplete TextView。但是你需要做一些改变,比如你必须维护以前日志用户的数组列表。