android中向listview保存实时的数据,并可使用搜索功能,且显示搜索内容的代码
时间: 2023-06-03 17:03:29 浏览: 119
下面是一个简单的实现示例:
首先,我们要创建一个适配器并将其附加到 ListView 上。适配器可以从数据源中获取数据并在 ListView 中显示它们。
```
public class MyAdapter extends BaseAdapter {
private ArrayList<String> mData;
private ArrayList<String> mFilteredData;
public MyAdapter(ArrayList<String> data) {
mData = data;
mFilteredData = new ArrayList<String>(data);
}
@Override
public int getCount() {
return mFilteredData.size();
}
@Override
public Object getItem(int position) {
return mFilteredData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
TextView textView = convertView.findViewById(android.R.id.text1);
textView.setText(mFilteredData.get(position));
return convertView;
}
public void filter(String query) {
mFilteredData.clear();
if (query.isEmpty()) {
mFilteredData.addAll(mData);
} else {
for (String item : mData) {
if (item.contains(query)) {
mFilteredData.add(item);
}
}
}
notifyDataSetChanged();
}
}
```
然后,在我们的 MainActivity 中,我们需要在 onCreate 方法中设置 ListView 和搜索框,并为搜索框添加一个监听器。搜索监听器将搜索框中的文本与数据源中的文本进行匹配,并将过滤后的数据传递给适配器。
```
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private EditText mSearchEditText;
private MyAdapter mAdapter;
private ArrayList<String> mDataList = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = findViewById(R.id.list_view);
mSearchEditText = findViewById(R.id.search_edit_text);
mAdapter = new MyAdapter(mDataList);
mListView.setAdapter(mAdapter);
mSearchEditText.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) {
mAdapter.filter(s.toString());
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
// 添加数据到列表
private void addDataToList(String data) {
mDataList.add(data);
mAdapter.notifyDataSetChanged();
}
}
```
这个示例假设我们已经有一个 ListView 和一个搜索框。对于任何搜索框中的更改,我们都将在适配器中对数据源执行一次过滤操作,并使用 notifyDataSetChanged 通知适配器更新。filter() 方法将搜索字符串与数据源中的每个项目进行比较,并将匹配的项目添加到过滤数据列表中。最后,我们设置一个 TextWatcher,在搜索框中输入更改时触发。在 onTextChanged() 回调中,我们将调用 mAdapter.filter() 来刷新列表的内容。