等待onPostExecute完成以制作新适配器

问题描述 投票:1回答:1

我尝试使用Tmdb api查找一些电影,但有问题。

[我每次在EditText上做某事时都需要执行Asynctask,但是任务要更长一些。

可以等待fetchData的onPostExecute完成吗?

我的创建AsyncTask的fetchData类:

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) {
            }
        });
java android asynchronous android-asynctask
1个回答
3
投票

我的建议是,您可以学习改装,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)
     }
}
© www.soinside.com 2019 - 2024. All rights reserved.