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.
pocketcommunityclient/app/src/main/java/com/community/pocket/ui/main/ui/share/MyAutoCompleteTextView.java

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);
}
}