我的RecyclerView充满了从服务器响应中收到的项目列表。
首先,用户输入日志/密码并选择特定内容,例如:1个内容。
登录后,用户转到包含RecyclerView的活动,其中包含内容字段1。
当用户单击“返回”按钮时,他返回到注册的主要活动并选择已经内容2.单击“登录”按钮后,再次转到RecyclerView,但由于某种原因,它包含来自内容1和字段的字段内容2添加到列表末尾。
我使用这种方法:
@Override
public void onBackPressed() {
super.onBackPressed();
recyclerView.removeAllViewsInLayout();
recyclerView.removeAllViews();
unswerFromMain.clear();
recyclerAdapter.updateAdapter(unswerFromMain);
}
这是在适配器:
public void updateAdapter (ArrayList<Unswer> updateUnswer){
getUnswer.clear();
getUnswer.addAll(updateUnswer);
notifyDataSetChanged();
}
所有这些方法都不起作用。
答案 0 :(得分:0)
我相信这是因为你在做其他事情之前打电话给onBackPressed()
。这意味着其他行永远不会运行。尝试交换它:
@Override
public void onBackPressed() {
recyclerView.removeAllViewsInLayout();
recyclerView.removeAllViews();
unswerFromMain.clear();
recyclerAdapter.updateAdapter(unswerFromMain);
super.onBackPressed();
}
答案 1 :(得分:0)
在您的适配器中设置一个空数组并通知
adapter.setItems(new ArrayList<MyPOJO>);
adapter.notifyDataSetChanged();
修改
你最后应该调用super.onBackpressed。喜欢这个
@Override
public void onBackPressed(){
recyclerView.removeAllViewsInLayout();
recyclerView.removeAllViews();
unswerFromMain.clear();
recyclerAdapter.updateAdapter(unswerFromMain);
super.onBackPressed();
}
答案 2 :(得分:0)
我发现了一个错误。
问题不是清理适配器,它没有清理来自主活动的ArrayList。这个ArrayList包含一个字段内容1,当我在使用RecyclerView进行活动时按下Back按钮返回主活动已经填充的ArrayList数据内容1.然后我选择了内容2,并且它上面的数据刚刚添加到了ArrayList。
我完全删除了onBackPressed()的所有方法,但super.onBackPressed()除外;一切都很好。谢谢大家!
答案 3 :(得分:0)
我试过上面的回答对我不起作用。
所以我用hide和show处理RecyclerView。
recyclerview.setVisiblity(View.GONE);
recyclerview.setVisiblity(View.VISIBLE);
我的逻辑是,
首先全局初始化一个int值,例如 int clicked = 0;
BackPress事件使用以下代码:
public void onBackPressed(){
if(recycler_view!=null){
if(clicked==0){
recycler_view.setVisibility(View.GONE);
clicked =1;
}else{
finishAffinity();
}
}else {
finishAffinity();
}
}
当您在活动中显示(recyclerview.setVisiblity(View.VISIBLE);)recyclelerview时设置Clicked = 0
因此,显示和隐藏recyclerview以及backpress的简单方法也得到了处理。