android editview 搜索,Android之EditText检索Listview,匹配关键字高亮
需求背景:在android 开发中,我们经常用EditText通过搜索关键字,来查询listview里面的内容,并且关键字高亮显示。基础知识点EditText监听文本变化:addTextChangedListener()2.adapter收到文本变化之后,刷新listview notifyDataSetChanged()话不多说,直接上代码:1.先撸个布局:布局就没啥好说的啦,简单粗暴xmlns:
需求背景:在android 开发中,我们经常用EditText通过搜索关键字,来查询listview里面的内容,并且关键字高亮显示。
基础知识点
EditText监听文本变化:addTextChangedListener()
2.adapter收到文本变化之后,刷新listview notifyDataSetChanged()
话不多说,直接上代码:
1.先撸个布局:布局就没啥好说的啦,简单粗暴
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:orientation="vertical"
tools:context="com.yhx.app.MainActivity">
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="50dp"
/>
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent">
2.当然写个adapter 适配器,这里demo 我就用Listview了,实际项目中,大佬们还是用Recyclerview 哦,这个没得说。
class ListAdapter extends BaseAdapter {
private String changeStr = "";
//
private List mlistdatas;
private LayoutInflater mInflater;
public ListAdapter(Context mcontext, List mlistdatas) {
this.mlistdatas = mlistdatas;
mInflater = LayoutInflater.from(mcontext);
}
@Override
public int getCount() {
return mlistdatas.size();
}
@Override
public Object getItem(int i) {
return mlistdatas.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
view = mInflater.inflate(R.layout.search_layout_item, null);
TextView tv_name = view.findViewById(R.id.text_name);
tv_name.setText(mlistdatas.get(i));
//处理关键字颜色变化
if (null != mlistdatas.get(i) && mlistdatas.get(i).contains(changeStr)) {
int index = mlistdatas.get(i).indexOf(changeStr);
int len = changeStr.length();
Spanned temp = Html.fromHtml(mlistdatas.get(i).substring(0, index)
+ ""
+ mlistdatas.get(i).substring(index, index + len) + ""
+ mlistdatas.get(i).substring(index + len, mlistdatas.get(i).length()));
tv_name.setText(temp);
} else {
tv_name.setText(mlistdatas.get(i));
}
return view;
}
//这个方法很重要,editText监听文本变化需要用到
public void changeText(String textStr) {
this.changeStr = textStr;
//别忘了,notifyDataSetChanged()一定要调用,一定要调用,一定要调用,重要事说三遍
notifyDataSetChanged();
}
}
adapter item 布局文件:search_layout_item.xml
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:id="@+id/text_name"
android:layout_width="match_parent"
android:layout_height="45dp"
android:gravity="center_vertical"
android:padding="8dp"
android:text="简书你好"
android:textColor="#333333"/>
Maintivity使用:
public class MainActivity extends AppCompatActivity {
private ListView mlistview;
private EditText meditText;
private ListAdapter mListAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mlistview = (ListView) findViewById(R.id.listview);
meditText = (EditText) findViewById(R.id.editText);
//
mListAdapter = new ListAdapter(this, initData());
mlistview.setAdapter(mListAdapter);
//meditText监听文本变化
meditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//告诉adapter 文本有变化了
mListAdapter.changeText(charSequence.toString());
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
private List initData() {
List mlistdata = new ArrayList<>();
mlistdata.add("我的第一写作,简书");
mlistdata.add("很多年以后,开始相信,所谓爱情,都是因为寂寞");
mlistdata.add("曾经企盼有地老天荒的爱情,有海枯石烂的情缘");
mlistdata.add("爱情不是游戏,因为我们玩不起");
mlistdata.add("爱情不是游戏,因为我们玩不起");
mlistdata.add("爱,不是一个人的独角戏,而是两个人的对手戏");
mlistdata.add("爱,不是一个人的独角戏,而是两个人的对手戏");
mlistdata.add("每个人心里,都有个过不去的人");
mlistdata.add("每个人心里,都有个过不去的人");
mlistdata.add("异地恋,恋的不仅仅是爱情,还有一种坚持");
mlistdata.add("异地恋,恋的不仅仅是爱情,还有一种坚持");
mlistdata.add("曾经,一遍遍的思念,一遍遍的在心里抱怨");
mlistdata.add("爱与被爱同样是受伤害,谁先不爱谁先离开");
mlistdata.add("还有de小星");
return mlistdata;
}
}
少不了老铁们需要的效果图,一切源于效果图说话
yhx.gif
后记:没有啥技术含量,但简单粗暴,实用,不就是这样吗 哈哈哈哈。
更多推荐
所有评论(0)