You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
2.5 KiB
79 lines
2.5 KiB
package com.community.pocket.ui.main.ui.share;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.os.Handler;
|
|
import android.os.Looper;
|
|
import android.os.Message;
|
|
import android.util.Log;
|
|
import android.widget.AutoCompleteTextView;
|
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
import java.lang.reflect.Method;
|
|
|
|
/**
|
|
* 动态更新自动搜索框数据
|
|
*/
|
|
public class MyAutoCompleteTextView {
|
|
//AutoCompleteTextView的doBeforeTextChanged方法
|
|
private Method doBeforeTextChanged;
|
|
//AutoCompleteTextView的doAfterTextChanged方法
|
|
private Method doAfterTextChanged;
|
|
|
|
private AutoCompleteTextView view;
|
|
|
|
private SearchViewModel searchViewModel;
|
|
|
|
public MyAutoCompleteTextView(AutoCompleteTextView view, SearchViewModel searchViewModel) {
|
|
this.view = view;
|
|
this.searchViewModel = searchViewModel;
|
|
}
|
|
|
|
//延时搜索的handler
|
|
private Handler searchHandler = new Handler(Looper.getMainLooper()) {
|
|
public void handleMessage(@NotNull Message msg) {
|
|
dealSearchHint();
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* 根据用户输入的字符去调用接口查询
|
|
*/
|
|
private void dealSearchHint() {
|
|
String searchContent = view.getText().toString();
|
|
if (searchContent.isEmpty()) {
|
|
return;
|
|
}
|
|
// appointmentViewModel.searchPeople(searchContent);
|
|
searchViewModel.search(searchContent);
|
|
}
|
|
|
|
@SuppressLint("SoonBlockedPrivateApi")
|
|
public void refreshDropList() {
|
|
try {
|
|
if (doAfterTextChanged == null) {
|
|
Class<AutoCompleteTextView> autoCompleteTextView = AutoCompleteTextView.class;
|
|
doBeforeTextChanged = autoCompleteTextView.getDeclaredMethod("doBeforeTextChanged");
|
|
doBeforeTextChanged.setAccessible(true);
|
|
doAfterTextChanged = autoCompleteTextView.getDeclaredMethod("doAfterTextChanged");
|
|
doAfterTextChanged.setAccessible(true);
|
|
}
|
|
|
|
// doBeforeTextChanged.invoke(appointment);
|
|
doAfterTextChanged.invoke(view);
|
|
} catch (Exception e) {
|
|
Log.e("", e.toString());
|
|
}
|
|
}
|
|
|
|
public void searchHandler() {
|
|
long time = System.currentTimeMillis();
|
|
//输入的字符间隔时间 小于700毫秒 移除以前的handler 延时600毫秒执行
|
|
if (view.getTag() != null && time - (Long) view.getTag() < 700) {
|
|
searchHandler.removeMessages(1);
|
|
}
|
|
searchHandler.sendEmptyMessageDelayed(1, 600);
|
|
view.setTag(time);
|
|
}
|
|
}
|
|
|