Java 如何在数组中搜索并在ListView中显示?
以下是我在Android Studio中的Java代码。GUI布局包含一个编辑文本,在其中输入一个单词,然后单击搜索按钮。之后,它将显示数组中匹配的单词(包含单词),并在listView中显示这些单词。实现从数组中提取匹配正则表达式,然后在listView中逐项显示的功能;我需要关于如何在Finder函数中实现它的想法 例1: 一系列单词:“灰尘”、“垃圾”、“推力”、“人”、“等级”、“鼹鼠”、“税” 输入:ust listView中的输出: 项目1:粉尘 项目2:推力Java 如何在数组中搜索并在ListView中显示?,java,android,regex,listview,Java,Android,Regex,Listview,以下是我在Android Studio中的Java代码。GUI布局包含一个编辑文本,在其中输入一个单词,然后单击搜索按钮。之后,它将显示数组中匹配的单词(包含单词),并在listView中显示这些单词。实现从数组中提取匹配正则表达式,然后在listView中逐项显示的功能;我需要关于如何在Finder函数中实现它的想法 例1: 一系列单词:“灰尘”、“垃圾”、“推力”、“人”、“等级”、“鼹鼠”、“税” 输入:ust listView中的输出: 项目1:粉尘 项目2:推力 package com
package com.neatsoft.hamqafia;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
EditText textBar;
Button findBtn;
ListView listView;
String words[] = {"Dust", "Duff", "Thrust", "Man", "Grade", "Mole", "Tax"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
private void Init(){
textBar = (EditText) findViewById(R.id.editText);
findBtn = (Button) findViewById(R.id.button);
listView = (ListView) findViewById(R.id.listView);
}
private void Finder(String toFind){
//Store Array in Trie Datastructure and then find toFind keyword and show the results item by item in listView
///OR create regex search by any other datastructure or methodology
}
}
单击“搜索”按钮时。您可以使用字符串str1.toLowerCase().contains(str2.toLowerCase())搜索列表项中的文本,并将包含搜索键的字符串保存在另一个列表或数组中。然后使用搜索列表项将数据重新加载到listview 注意:您可以使用另一个按钮(清除搜索),单击该按钮时,将searchlist变量指定给初始列表并重新加载数据。(无搜索案例)
private void Finder(字符串toFind){
if(searchList==null){
searchList=newarraylist();
}
searchList.clear();
if(toFind!=null | |!toFind.trim().equals(“”){
for(字符串str:words){
if(str.toLowerCase().contains(toFind.toLowerCase()))
searchList.add(str);
}
}
notifyDataToListView();
}
私有void notifyDataToListView(){
if(适配器==null){
适配器=新的BaseAdapter(){
@凌驾
public int getCount(){
返回searchList==null?0:searchList.size();
}
@凌驾
公共对象getItem(int位置){
返回null;
}
@凌驾
公共长getItemId(int位置){
返回0;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=新文本视图(getApplicationContext());
}
((TextView)convertView.setText(searchList.get(position));
返回null;
}
};
myListView.setAdapter(适配器);
}否则{
adapter.notifyDataSetChanged();
}
}
像这样。全局定义BaseAdapter对象。请举个例子来解释它,这样就足够了吗?
private void Finder(String toFind){
if(searchList == null) {
searchList = new ArrayList<>();
}
searchList.clear();
if(toFind != null || !toFind.trim().equals("")) {
for(String str : words) {
if(str.toLowerCase().contains(toFind.toLowerCase()))
searchList.add(str);
}
}
notifyDataToListView();
}
private void notifyDataToListView() {
if(adapter == null) {
adapter = new BaseAdapter() {
@Override
public int getCount() {
return searchList == null ? 0 : searchList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = new TextView(getApplicationContext());
}
((TextView) convertView).setText(searchList.get(position));
return null;
}
};
myListView.setAdapter(adapter);
}else {
adapter.notifyDataSetChanged();
}
}