怎样用PopupWindow实现点击EditText在其下面显示最近五条的输入记录
时间: 2024-04-30 16:20:14 浏览: 21
可以通过以下步骤实现:
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);
}
}
}
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)