ユーザーがテキストを編集するときに、最近入力したテキストのドロップダウン リストを表示する必要があります。たとえば、ログイン ページには、以前にログインしたユーザーが表示されます。
4 に答える
AutoCompleteTextViewhttp ://developer.android.com/reference/android/widget/AutoCompleteTextView.htmlを探しています
ログインのリストを作成する
ユーザーがログインするときは、そのログインをある種の永続ストレージ(データベース、テキストファイル)に保存する必要があります。
オートコンプリートリストの作成
EditTextログインでフォームを作成するたびに
- データベースから以前のログイン値を抽出します
- これらの以前のログイン値から文字列配列を作成します
- 文字列配列から配列アダプタを作成します
- アレイアダプタをAutoCompleteTextViewに接続します。
解決策が見つからなかったので、これを実装しました。私は Gopher が言ったことを実行しましたが、ファイルではなく個人の設定として保存します。また、項目がリストに 2 回表示されるのを防ぐために、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 は、入力を含むテキストビューです。ボタンをクリックすると、上記のコードが呼び出されます。
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に追加する必要がある場合もあります。
私はこれに多くの時間を費やしたので、これが役に立った場合は賛成票を投じることを忘れないでください.
AutocompleteTextViewを使用する
AutoComplete TextViewを使用できます。ただし、以前の Log User の ArrayList を維持する必要があるように、変更を加える必要があります。