Дождитесь окончания на PostExecute, чтобы создать новый адаптер - PullRequest
1 голос
/ 14 октября 2019

Я пытаюсь найти какой-нибудь фильм с API Tmdb, но у меня есть проблема.

Мне нужно делать Asynctask каждый раз, когда я что-то делаю на своем EditText, но задача состоит в том, чтобы дольше.

Можно ли подождать, пока onPostExecute на fetchData не будет завершен?

Мой класс fetchData, который создает AsyncTask:

protected Void doInBackground(Void... voids) {
    //make things...
}
protected void onPostExecute(Void aVoid) {
    super.onPostExecute(aVoid);
    SearchActivity.listFinale = list;
}

Часть моей функции SearchActivity:

public static RecyclerView rv;
public static ArrayList<Movie> listFinale = new ArrayList<Movie>();

recherche.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

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

                fetchData process = new fetchData(recherche.getText().toString());
                process.execute();


                //I want to do this part when onPostExecute is finish
                rv.setLayoutManager(new LinearLayoutManager(SearchActivity.this));
                MyAdapter mMyadapter= new MyAdapter(listFinale);
                rv.setAdapter(mMyadapter);
                mMyadapter.setonItmeClickListener(SearchActivity.this);
               //

            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });

1 Ответ

3 голосов
/ 14 октября 2019

Мое предложение заключается в том, что вы можете изучать модифицированные библиотеки rxjava rxandroid (реактивное программирование). таким образом, вы можете общаться с интерфейсом. Вы можете создать интерфейс и реализовать его в SearchActivity.

public interface IResultListener {
  void onResult(List<BlaBlaModel> list);
}

, затем реализовать в SearchActivity.

private IResultListener resultListener = new IResultListener() {
    @Override
    public void onResult(List<BlaBlaModel> list) {
        // do anything...
    }
};

, затем мы назначим этот объект интерфейса asynctask. когда результат завершен, мы отправляем список в SearchActivity с таким интерфейсным объектом.

protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
     if (listener != null) {
        listener.onResult(list)
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...