如何在适配器类之外更新RecyclerView适配器

时间:2020-08-28 03:55:59

标签: java android android-recyclerview

我正在制作一个Android应用程序,它允许用户在editText中输入关键字,然后当他们点击提交时,下面的recyclerview将会显示API请求的结果。

我的recyclerView适配器类中有一个updateList()方法

list = savedInfo.getResult(); // get updated list from a singleton class
notifyDataSetChanged(); // update the recyclerView

我在成功发出API请求后调用了此方法。但是,它现在正在运行,recyclerView尚未更新。

mSearchBox是editText,允许用户输入关键字,这是onEditorAction,它将进行API调用,如果调用成功,则将调用UpdateList(),然后适配器将获取更新的列表并执行notifyDataSetChanged()

        mSearchBox.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
            if (i == EditorInfo.IME_ACTION_DONE) {
                HttpRequest httpRequest = new HttpRequest();
                mHomeText.setText(textView.getText());
                try {
                    if (httpRequest.makeCall(textView.getText().toString())){
                        adapter.updateList();
                    }
                    else {
                        // showing error message
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    return false;
                }
                return true;
            }
            return false;
        }
    });

此外,这是设置适配器的步骤

    final ResultListAdapteradapter = new ResultListAdapter();
    mResult.setAdapter(adapter);
    mResult.setLayoutManager(new LinearLayoutManager(getContext()));

调试步骤:我尝试设置断点,发现API Request和我的Singleton类都可以正常工作,问题仅在于RecyclerView。

非常感谢您!

1 个答案:

答案 0 :(得分:2)

这样做的时候

list = savedInfo.getResult();
notifyDataSetChanged();

每次创建新的列表实例时都不会引用旧的实例。因此,应该分配列表而不是

list.clear()
list.addAll(savedInfo.getResult());
notifyDataSetChanged();

如果之前没有做过,请不要忘记初始化list