先是效果图,很丑,适用个别场景
private EditText text;
private ListView listView;
private ArrayAdapter<String> adapter;
private List<String> dataList;
private SharedPreferences.Editor editor;
private SharedPreferences preferences;
private void showEditText() {
preferences = getSharedPreferences("input_history", MODE_PRIVATE);
editor =preferences.edit();
// 获取最近五条输入记录
dataList = new ArrayList<>();
for (int i = 0; i<5; i++) {
String input = preferences.getString("input_" + i,"");
if (!TextUtils.isEmpty(input)) {
dataList.add(input);
}
}
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList);
listView.setAdapter(adapter);
// 设置ListView的点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String input = dataList.get(position);
text.setText(input);
text.setSelection(input.length());
listView.setVisibility(View.GONE);
button.setVisibility(View.VISIBLE);
editText.setVisibility(View.VISIBLE);
}
});
// 设置EditText的焦点监听器
text.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
listView.setVisibility(View.VISIBLE);
button.setVisibility(View.GONE);
editText.setVisibility(View.GONE);
if (!hasFocus) {
listView.setVisibility(View.GONE);
button.setVisibility(View.VISIBLE);
editText.setVisibility(View.VISIBLE);
String input = text.getText().toString().trim();
if (!TextUtils.isEmpty(input)) {
// 将新的输入记录添加到SharedPreferences中
for (int i = 0; i < 5; i++) {
String oldInput = preferences.getString("input_" + i, "");
if (input.equals(oldInput)) {
return;
}
}
editor.putString("input_0", input);
for (int i = 1; i < 5; i++) {
String oldInput = preferences.getString("input_" + (i - 1), "");
editor.putString("input_" + i, oldInput);
}
editor.apply();
// 更新ListView的数据
dataList.clear();
for (int i = 0; i < 5; i++) {
String newInput = preferences.getString("input_" + i, "");
if (!TextUtils.isEmpty(newInput)) {
dataList.add(newInput);
}
}
adapter.notifyDataSetChanged();
}
}
}
});
}
2.第二中效果图
使用 AutoCompleteTextView 实现,下拉框弹出的不是全部历史记录而是根据输入显示
<AutoCompleteTextView
android:completionThreshold="1"
android:popupBackground="@color/white"
android:hint="@string/text_wifi_number"/>
第一个属性是输入第一字符开始弹出提示
第二个属性是 设置弹出的 PopupWindow 的背景色(我的AS上直接打不出来,复制过来却可以正常使用)
使用起来直接套用第一个就行适配器得处改改
private AutoCompleteTextView text;
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList);
text.setAdapter(adapter);