BÀI 68 - TẠO SEARCHVIEW VỚI TOOLBAR TRONG ANDROID
Thêm thư viện circleImageView để đổ hình ảnh vào danh sách Item trong recylerView
Thu viện này sẽ hỗ trợ tạo viền bên ngoài để giúp hình ảnh có dạng hình tròn.
implementation 'de.hdodenhof:circleimageview:3.1.0'
Tạo một cái layout như sau:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<de.hdodenhof.circleimageview.CircleImageView
android:id="@+id/imageview_hinhanh_thanhpho"
android:layout_width="50dp"
android:layout_height="50dp"
android:padding="2dp"
android:src="@drawable/error_image_shop" />
<TextView
android:id="@+id/textview_ten_thanhpho"
android:textStyle="bold"
android:textSize="16sp"
android:layout_marginStart="10dp"
android:layout_gravity="center_vertical"
android:textColor="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
Tạo một cái Class
public class ClassTimKiemTenThanhPho {
private String hinhAnhThanhPho;
private String tenThanhPho;
public ClassTimKiemTenThanhPho(String hinhAnhThanhPho, String tenThanhPho) {
this.hinhAnhThanhPho = hinhAnhThanhPho;
this.tenThanhPho = tenThanhPho;
}
public String getHinhAnhThanhPho() {
return hinhAnhThanhPho;
}
public void setHinhAnhThanhPho(String hinhAnhThanhPho) {
this.hinhAnhThanhPho = hinhAnhThanhPho;
}
public String getTenThanhPho() {
return tenThanhPho;
}
public void setTenThanhPho(String tenThanhPho) {
this.tenThanhPho = tenThanhPho;
}
}
Tạo một cái Adapter
public class AdapterThanhPho extends RecyclerView.Adapter<AdapterThanhPho.AdapterTimKiemThanhPho> implements Filterable {
Context context;
public static ArrayList<ClassTimKiemTenThanhPho> arrayListThanhPho;
ArrayList<ClassTimKiemTenThanhPho> arrayListThanhPhoCu;
public AdapterThanhPho(Context context, ArrayList<ClassTimKiemTenThanhPho> arrayListThanhPho) {
this.context = context;
AdapterThanhPho.arrayListThanhPho = arrayListThanhPho;
this.arrayListThanhPhoCu = arrayListThanhPho;
}
@NonNull
@Override
public AdapterTimKiemThanhPho onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_ten_thanhpho, parent, false);
return new AdapterTimKiemThanhPho(view);
}
@Override
public void onBindViewHolder(@NonNull AdapterTimKiemThanhPho holder, int position) {
ClassTimKiemTenThanhPho thanhPho = arrayListThanhPho.get(position);
holder.tvTenThanhPho.setText(thanhPho.getTenThanhPho());
Picasso.get().load(thanhPho.getHinhAnhThanhPho())
.placeholder(R.drawable.no_image_shop)
.error(R.drawable.error_image_shop)
.into(holder.imageView);
}
@Override
public int getItemCount() {
if (arrayListThanhPho != null) {
return arrayListThanhPho.size();
}
return 0;
}
public Filter getFilter() {
return new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String keySearch = constraint.toString();
if (keySearch.isEmpty()) {
arrayListThanhPho = arrayListThanhPhoCu;
} else {
ArrayList<ClassTimKiemTenThanhPho> arrayListResultsSearch = new ArrayList<>();
for (int i=0; i<arrayListThanhPhoCu.size(); i++) {
if (arrayListThanhPhoCu.get(i).getTenThanhPho().toLowerCase().contains(keySearch.toLowerCase())) {
arrayListResultsSearch.add(arrayListThanhPhoCu.get(i));
}
}
arrayListThanhPho = arrayListResultsSearch;
}
FilterResults filterResults = new FilterResults();
filterResults.values = arrayListThanhPho;
return filterResults;
}
@SuppressLint("NotifyDataSetChanged")
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
arrayListThanhPho = (ArrayList<ClassTimKiemTenThanhPho>) results.values;
notifyDataSetChanged();
}
};
}
public static class AdapterTimKiemThanhPho extends RecyclerView.ViewHolder {
private final CircleImageView imageView;
private final TextView tvTenThanhPho;
public AdapterTimKiemThanhPho(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageview_hinhanh_thanhpho);
tvTenThanhPho = itemView.findViewById(R.id.textview_ten_thanhpho);
}
}
}
Tạo một menu như này
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_searchView"
android:title="@string/tim_kiem"
android:icon="@drawable/icon_search"
app:showAsAction="always"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
</menu>
Trong Main.java code như này
SearchView searchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_thoi_tiet);
AnhXa();
SetToolbar();
Click();
}
private void SetToolbar() {
setSupportActionBar(tbThoiTiet);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_searchview, menu);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
searchView = (SearchView) menu.findItem(R.id.menu_searchView).getActionView();
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setMaxWidth(Integer.MAX_VALUE);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
rvThanhPho.setVisibility(View.VISIBLE);
adapterThanhPho.getFilter().filter(query);
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
rvThanhPho.setVisibility(View.VISIBLE);
adapterThanhPho.getFilter().filter(newText);
if (newText.isEmpty()) {
rvThanhPho.setVisibility(View.INVISIBLE);
}
return false;
}
});
return true;
}
private void Click() {
rvThanhPho.addOnItemTouchListener(new RecyclerTouchListener(this, rvThanhPho, new RecyclerTouchListener.ClickListener() {
@Override
public void onClick(View view, int position) {
id_Weather = AdapterThanhPho.arrayListThanhPho.get(position).getId_weather();
thanhPho = AdapterThanhPho.arrayListThanhPho.get(position).getTenThanhPho();
if (!id_Weather.isEmpty()) {
rvThanhPho.setVisibility(View.INVISIBLE);
searchView.setQuery(null, false);
searchView.clearFocus();
new AsyncTaskThoiTiet().execute();
} else {
Toast.makeText(Activity_ThoiTiet.this, "Hãy thử lại sau", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onLongClick(View view, int position) {
}
}));
}