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) {


}

}));

}