gpt4 book ai didi

android - 管理 Android 应用程序中的延迟

转载 作者:搜寻专家 更新时间:2023-11-01 08:14:49 25 4
gpt4 key购买 nike

大家好,我想知道如何管理 Android 应用程序中的延迟,例如,我有一个重写方法 onTextChanged()。与此相关,我想设置 0.5 秒这样的延迟,以便最终确定用户在我的自动完成文本框中输入的内容。如果用户在 0.5 秒内挂起/停止输入,我希望在我的代码中执行某种方法或实现(即我自己的过滤方案/自动完成文本框中的逻辑,只是为了减少我的应用程序中的资源使用,谢谢)。

这是我的示例代码:

protected AutoCompleteTextView autoCompleteView;
protected AutoCompleteAdapter suggsAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

countries = getResources().getStringArray(R.array.countries_array);

autoCompleteView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);

TextWatcher textChecker = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {

//here inside this overridden method, I wanted to create a delay in order to lessen the
//use of resources.

String enteredText = autoCompleteView.getText().toString();
refreshList(enteredText);

}
};


autoCompleteView.addTextChangedListener(textChecker);

}

例如,用户键入“Lond”(对于像“London”这样的字符串),每个字母的键入时间少于 0.5 秒,我希望调用所有先前的 onTextChanged() 方法(键入“L”时调用的方法, "o"和 "n") 将被忽略,只有当输入最后一个字母时 onTextChanged() 才会被授予执行权限。

我该怎么做,请帮助我:(。

最佳答案

您可以创建一个 Handler 子类并在 onTextChanged( ) 被触发。您可以使用 Handler.removeMessages() 从消息队列中删除消息。您应该在 Handler.handleMessage() 方法中处理消息。所以您的 onTextChanged() 方法将类似于:

mHandler.removeMessages(MESSAGE_TEXT_CHANGED);
mHandler.sendEmptyMessage(MESSAGE_TEXT_CHANGED, 500);

编辑:这是一个代码示例。我还没有测试过它,所以我不确定它是否有效。

private static final int AUTOCOMPLETE_DELAY = 500;
private static final int MESSAGE_TEXT_CHANGED = 0;

private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MESSAGE_TEXT_CHANGED) {
String enteredText = (String)msg.obj;
refreshList(enteredText);
}
}
};

// ... your code here

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String enteredText = autoCompleteView.getText().toString();
mHandler.removeMessages(MESSAGE_TEXT_CHANGED);
final Message msg = Message.obtain(mHandler, MESSAGE_TEXT_CHANGED, enteredText);
mHandler.sendMessageDelayed(msg, AUTOCOMPLETE_DELAY);
}

关于android - 管理 Android 应用程序中的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com