android中向listview保存其他界面的数据数据,并可使用搜索功能,且显示搜索内容的代码
时间: 2023-06-03 22:03:25 浏览: 54
抱歉,我可以回答这个问题。以下是Android中实现向listview保存其他界面的数据并使用搜索功能的代码:
1. 首先,在布局文件中添加ListView和一个搜索栏EditText:
```
<ListView
android:id="@+id/myListView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<EditText
android:id="@+id/searchEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Search" />
```
2. 在Activity中,定义List和Adapter:
```
//定义List
List<MyData> dataList = new ArrayList<>();
//定义Adapter
MyAdapter adapter = new MyAdapter(this, dataList);
//设置ListView Adapter
ListView myListView = findViewById(R.id.myListView);
myListView.setAdapter(adapter);
```
3. 在其他界面添加数据到List中:
```
//添加数据到List
dataList.add(new MyData("Item 1", "Description 1"));
dataList.add(new MyData("Item 2", "Description 2"));
dataList.add(new MyData("Item 3", "Description 3"));
...
//通知Adapter更新数据
adapter.notifyDataSetChanged();
```
4. 实现搜索功能:
```
//获取搜索栏EditText
EditText searchEditText = findViewById(R.id.searchEditText);
//为EditText添加文本变化监听器
searchEditText.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) {
//根据输入的文本内容过滤数据
adapter.getFilter().filter(s);
}
@Override
public void afterTextChanged(Editable s) {
}
});
```
5. 实现Adapter:
```
class MyAdapter extends BaseAdapter implements Filterable {
Context context;
List<MyData> dataList;
List<MyData> filteredDataList;
public MyAdapter(Context context, List<MyData> dataList) {
this.context = context;
this.dataList = dataList;
this.filteredDataList = dataList;
}
@Override
public int getCount() {
return filteredDataList.size();
}
@Override
public Object getItem(int position) {
return filteredDataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// ...
return convertView;
}
//实现Filterable接口
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
FilterResults results = new FilterResults();
List<MyData> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
//搜索栏为空,不过滤,返回全部数据
results.count = dataList.size();
results.values = dataList;
} else {
String searchString = constraint.toString().toLowerCase();
//根据搜索栏内容过滤数据
for (MyData data : dataList) {
if (data.getItem().toLowerCase().contains(searchString) ||
data.getDescription().toLowerCase().contains(searchString)) {
filteredList.add(data);
}
}
results.count = filteredList.size();
results.values = filteredList;
}
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
filteredDataList = (List<MyData>) results.values;
notifyDataSetChanged();
}
};
}
}
class MyData {
String item;
String description;
public MyData(String item, String description) {
this.item = item;
this.description = description;
}
public String getItem() {
return item;
}
public String getDescription() {
return description;
}
}
```