点击EditText显示最近五条的输入记录
时间: 2024-05-31 16:08:59 浏览: 9
好的,你可以通过以下步骤来实现这个功能:
1. 首先,在你的布局文件中添加一个EditText控件和一个ListView控件,用于显示最近五条输入记录。
2. 接着,在你的Activity中,定义一个List<String>类型的变量,用于存储用户输入的记录。每当用户输入一条记录时,将该记录添加到这个List中,并更新ListView的适配器。
3. 在EditText的setOnFocusChangeListener中,添加一个监听器,当EditText获取焦点时,显示ListView,并将最近五条记录显示在ListView中。你可以使用一个适配器来实现ListView的显示,这个适配器中的数据源就是你在第二步中定义的List。
4. 在EditText的setOnItemClickListener中,添加一个监听器,当用户点击某一条记录时,将该记录填充到EditText中,并隐藏ListView。
5. 最后,在onSaveInstanceState方法中,保存List的状态,以便在Activity被销毁后能够恢复数据。
希望这些步骤能够帮助到你实现这个功能。
相关问题
点击EditText显示最近五条的输入记录的代码如何实现
你可以通过使用SharedPreferences实现显示最近五条输入记录的功能。具体实现方式如下:
1. 在EditText的OnFocusChangeListener中获取SharedPreferences中保存的最近五条输入记录。
2. 将获取到的记录显示在一个ListView或RecyclerView中。
3. 当用户点击某一条记录时,将该记录设置为EditText的文本内容。
以下是具体的实现代码:
```
public class MainActivity extends AppCompatActivity {
private EditText editText;
private ListView listView;
private ArrayAdapter<String> adapter;
private List<String> dataList;
private SharedPreferences preferences;
private SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.edit_text);
listView = findViewById(R.id.list_view);
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);
editText.setText(input);
editText.setSelection(input.length());
}
});
// 设置EditText的焦点监听器
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
String input = editText.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();
}
}
}
});
}
}
```
在上述代码中,我们首先获取SharedPreferences实例,并在OnFocusChangeListener中实现了最近五条输入记录的保存和显示。当用户失去EditText的焦点时,我们会将新的输入记录添加到SharedPreferences中,并更新ListView的数据。
怎样用PopupWindow实现点击EditText在其下面显示最近五条的输入记录
可以通过以下步骤实现:
1. 创建一个PopupWindow对象,并设置其宽度和高度。
```
PopupWindow popupWindow = new PopupWindow(context);
popupWindow.setWidth(editText.getWidth());
popupWindow.setHeight(height);
```
2. 创建一个RecyclerView对象,并设置其布局管理器和适配器。
```
RecyclerView recyclerView = new RecyclerView(context);
recyclerView.setLayoutManager(new LinearLayoutManager(context));
recyclerView.setAdapter(adapter);
```
3. 创建一个Adapter对象,用于显示最近五条输入记录。在Adapter中,可以从SharedPreferences中获取保存的输入记录,并在列表中显示。
```
public class RecordAdapter extends RecyclerView.Adapter<RecordAdapter.RecordViewHolder> {
private List<String> recordList;
public RecordAdapter(List<String> recordList) {
this.recordList = recordList;
}
@NonNull
@Override
public RecordViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_record, parent, false);
return new RecordViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecordViewHolder holder, int position) {
String record = recordList.get(position);
holder.recordText.setText(record);
}
@Override
public int getItemCount() {
return recordList.size();
}
static class RecordViewHolder extends RecyclerView.ViewHolder {
TextView recordText;
public RecordViewHolder(View itemView) {
super(itemView);
recordText = itemView.findViewById(R.id.record_text);
}
}
}
```
4. 在EditText的点击事件中,显示PopupWindow,并将RecyclerView添加到PopupWindow中。
```
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View contentView = LayoutInflater.from(context).inflate(R.layout.popup_window, null);
RecyclerView recyclerView = contentView.findViewById(R.id.record_list);
RecordAdapter adapter = new RecordAdapter(recordList);
recyclerView.setAdapter(adapter);
PopupWindow popupWindow = new PopupWindow(contentView, editText.getWidth(), height, true);
popupWindow.showAsDropDown(editText);
}
});
```
5. 在Activity的onPause()方法中,保存最近五条输入记录到SharedPreferences中。
```
@Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor editor = getSharedPreferences("record", MODE_PRIVATE).edit();
if (recordList.size() > 5) {
recordList = recordList.subList(0, 5);
}
Set<String> recordSet = new HashSet<>(recordList);
editor.putStringSet("recordList", recordSet);
editor.apply();
}
```
完整代码如下:
```
public class MainActivity extends AppCompatActivity {
private EditText editText;
private List<String> recordList = new ArrayList<>();
private int height;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.edit_text);
// 获取屏幕高度
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
height = (int) (displayMetrics.heightPixels * 0.3);
// 从SharedPreferences中获取最近五条输入记录
SharedPreferences sharedPreferences = getSharedPreferences("record", MODE_PRIVATE);
Set<String> recordSet = sharedPreferences.getStringSet("recordList", null);
if (recordSet != null) {
recordList.addAll(recordSet);
}
// 监听EditText的输入事件
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
String input = s.toString().trim();
if (!TextUtils.isEmpty(input) && !recordList.contains(input)) {
recordList.add(0, input);
}
}
});
// 点击EditText显示PopupWindow
editText.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View contentView = LayoutInflater.from(MainActivity.this).inflate(R.layout.popup_window, null);
RecyclerView recyclerView = contentView.findViewById(R.id.record_list);
RecordAdapter adapter = new RecordAdapter(recordList);
recyclerView.setAdapter(adapter);
PopupWindow popupWindow = new PopupWindow(contentView, editText.getWidth(), height, true);
popupWindow.showAsDropDown(editText);
}
});
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences.Editor editor = getSharedPreferences("record", MODE_PRIVATE).edit();
if (recordList.size() > 5) {
recordList = recordList.subList(0, 5);
}
Set<String> recordSet = new HashSet<>(recordList);
editor.putStringSet("recordList", recordSet);
editor.apply();
}
public class RecordAdapter extends RecyclerView.Adapter<RecordAdapter.RecordViewHolder> {
private List<String> recordList;
public RecordAdapter(List<String> recordList) {
this.recordList = recordList;
}
@NonNull
@Override
public RecordViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_record, parent, false);
return new RecordViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecordViewHolder holder, int position) {
String record = recordList.get(position);
holder.recordText.setText(record);
}
@Override
public int getItemCount() {
return recordList.size();
}
static class RecordViewHolder extends RecyclerView.ViewHolder {
TextView recordText;
public RecordViewHolder(View itemView) {
super(itemView);
recordText = itemView.findViewById(R.id.record_text);
}
}
}
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)