我正在制作一个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。
非常感谢您!
答案 0 :(得分:2)
这样做的时候
list = savedInfo.getResult();
notifyDataSetChanged();
每次创建新的列表实例时都不会引用旧的实例。因此,应该分配列表而不是
list.clear()
list.addAll(savedInfo.getResult());
notifyDataSetChanged();
如果之前没有做过,请不要忘记初始化list
。