点击按钮返回后清洁RecyclerView

时间:2017-03-06 16:10:50

标签: android android-recyclerview onbackpressed

我的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();

}

所有这些方法都不起作用。

4 个答案:

答案 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的简单方法也得到了处理。