ユーザーが入力に何かを入力してEnterキーを押すと、検索機能があり、非同期タスクが起動して結果を取得します。asynctask の実行前/実行中に、「読み込み中」と表示されるテキストビュー (visibility=gone) が必要です。ただし、postExecute で結果を表示する前に、ローディング テキストを 1 秒間表示するだけです。そのため、asynctask が実行されている数秒間、読み込み中のテキストは表示されません。誰かが理由を知っていますか?
私のコードでわかるように、asynctask の実行前と asynctask の preExecute 中に読み込みテキストが表示されるように設定しましたが、どちらも問題を解決しません。
編集は私のEditText、取得は私の「読み込み」TextViewです
ここに私の EditText キーリスナーがあります:
edit.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_ENTER:
retrieving.setVisibility(View.VISIBLE);
SearchTask task = (SearchTask) new SearchTask(edit,retrieving);
task.execute(edit.getText().toString());
try {
task.get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
break;
}
}
return false;
}
});
非同期タスクは次のとおりです。
public class SearchTask extends AsyncTask {
private EditText edit;
private TextView retrieving;
public SearchTask(EditText edit,TextView retreiving, ) {
this.edit = edit;
this.retrieving = retreiving;
}
@Override
protected void onPreExecute() {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
retrieving.setVisibility(View.VISIBLE);
}
@Override
protected Playlist doInBackground(String... params) {
//download and parse xml
}
@Override
protected void onPostExecute(Playlist playlist) {
retrieving.setVisibility(View.GONE);
}