本地搜索
1.界面
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:padding="5dp"
android:focusable="true"
android:background="@color/white_bg"
android:focusableInTouchMode="true"
android:layout_height="wrap_content">
<EditText
android:id="@+id/et_search"
android:layout_width="match_parent"
android:background="@drawable/common_shape_half_white2"
android:paddingTop="8dp"
android:paddingBottom="8dp"
android:textSize="14sp"
android:singleLine="true"
android:imeOptions="actionSearch"
android:gravity="center_horizontal"
android:layout_height="wrap_content" />
</LinearLayout
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:listitem="@layout/list_item_vehicle"/>
</LinearLayout>
EditText的background
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:radius="50dp" />
<solid android:color="#FFFFFF" />
</shape>
2.activity
public class DriverListActivity extends BaseActivity {
private EditText et_search;
private RecyclerView recyclerView;
private DriverListAdapter mAdapter;
private List<Driver> dataList = new ArrayList<>();
private List<Driver> resultList = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_driver_list);
initViews();
}
private void initViews() {
et_search = (EditText) findViewById(R.id.et_search);
et_search.addTextChangedListener(new EditChangedListener());
et_search.setHint(getIconText(DriverListActivity.this, R.drawable.common_icon_search, (int) et_search.getTextSize(),getString(R.string.search_vehicle)));
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mAdapter = new DriverListAdapter(onItemClickListener);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(mAdapter);
for(int i = 0;i<5;i++){
Driver bean = new Driver();
bean.name = i+"";
dataList.add(bean);
resultList.add(bean);
}
mAdapter.addAll(resultList);
}
private CharSequence getIconText(Context context, int resourceId, int iconSize, CharSequence text) {
SpannableStringBuilder ssb = new SpannableStringBuilder("*"+text);
Drawable drawable = context.getResources().getDrawable(resourceId);
drawable.setBounds(0,0,iconSize,iconSize);
ImageSpan span = new ImageSpan(drawable);
ssb.setSpan(span,0,1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
return ssb;
}
private OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClickListener(View view, int position) {
finish();
}
};
private class EditChangedListener implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
resultList.clear();
resultList = getNewData(editable.toString());
mAdapter.notifyDataSetChanged(resultList);
}
}
private List<Driver> getNewData(String input_info) {
resultList.clear();
for (int i = 0; i < dataList.size(); i++) {
Driver bean = dataList.get(i);
if (bean.name.contains(input_info)) {
resultList.add(bean);
}
}
return resultList;
}
}
adapter
public class DriverListAdapter extends RecyclerView.Adapter<DriverListAdapter.DriverListHolder>{
private int LAYOUT_ID = R.layout.item_driver_list;
public List<Driver> datas;
public DriverListAdapter(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
datas = new ArrayList<>();
}
private OnItemClickListener onItemClickListener;
@Override
public DriverListHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View rootView = LayoutInflater.from(parent.getContext()).inflate(LAYOUT_ID, parent, false);
rootView.setBackgroundResource(R.drawable.common_selector_default);
return new DriverListHolder(rootView,onItemClickListener);
}
@Override
public void onBindViewHolder(DriverListHolder holder, int position) {
holder.setData(datas.get(position));
}
@Override
public int getItemCount() {
return datas.size();
}
public void notifyDataSetChanged(List<Driver> dataList) {
this.datas.clear();
this.datas.addAll(dataList);
notifyDataSetChanged();
}
public void addAll(List<Driver> dataList) {
this.datas.addAll(dataList);
notifyDataSetChanged();
}
public void clear() {
this.datas.clear();
notifyDataSetChanged();
}
public static class DriverListHolder extends RecyclerView.ViewHolder {
TextView tvName, tvDepartment;
OnItemClickListener onItemClickListener;
private View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
if(onItemClickListener != null){
onItemClickListener.onItemClickListener(view,getAdapterPosition());
}
}
};
public DriverListHolder(View itemView, OnItemClickListener onItemClickListener) {
super(itemView);
this.onItemClickListener = onItemClickListener;
itemView.setOnClickListener(onClickListener);
tvName = (TextView) itemView.findViewById(R.id.tv_name);
tvDepartment = (TextView) itemView.findViewById(R.id.tv_department);
}
public void setData(Driver bean) {
tvName.setText(bean.name);
// tvName.setText(bean.department);
}
}
网络搜索
activity
public class DriverListActivity extends BaseActivity {
private EditText et_search;
private RecyclerView recyclerView;
private DriverListAdapter mAdapter;
public static final String EXTRA_DATA = "DRIVER";
private String filterName = "";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_driver_list);
initViews();
//此处网络请求
// presenter.loadData(true);
}
private void initViews() {
et_search = (EditText) findViewById(R.id.et_search);
et_search.setOnEditorActionListener(actionListener);
et_search.setHint(getIconText(DriverListActivity.this, R.drawable.common_icon_search, (int) et_search.getTextSize(),"请输入名字"));
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
mAdapter = new DriverListAdapter(onItemClickListener);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.setAdapter(mAdapter);
}
private OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClickListener(View view, int position) {
}
};
private CharSequence getIconText(Context context, int resourceId, int iconSize, CharSequence text) {
SpannableStringBuilder ssb = new SpannableStringBuilder("*"+text);
Drawable drawable = context.getResources().getDrawable(resourceId);
drawable.setBounds(0,0,iconSize,iconSize);
ImageSpan span = new ImageSpan(drawable);
ssb.setSpan(span,0,1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
return ssb;
}
//点击键盘上的搜索进行网络搜索
private TextView.OnEditorActionListener actionListener = new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(textView.getWindowToken(),0);
if(keyEvent != null && keyEvent.getAction() == KeyEvent.ACTION_DOWN ) {
onSearch(textView.getText().toString());
return true;
}else{
return false;
}
}
};
private void onSearch(String text) {
//根据输入搜索
filterName = text;
// presenter.loadData(true);
}
}