2017-03-06 101 views
0

我有RecyclerView充满从服务器响应收到的项目列表。清理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(); 

} 

所有这些方法didn`t工作。

+0

您必须清除适配器,然后使用adapter.notifydatasetchange并在最后一行用户super.onBackPressed(); – Saman

+0

但我做到了... – Dem

+0

recyclerAdapter.notifyDataSetChanged(); – Saman

回答

0

我相信这是因为您在做其他事情之前调用onBackPressed()。这意味着其他线路从不运行。尝试交换左右吧:

@Override 
public void onBackPressed() { 
    recyclerView.removeAllViewsInLayout(); 
    recyclerView.removeAllViews(); 
    unswerFromMain.clear(); 
    recyclerAdapter.updateAdapter(unswerFromMain); 
    super.onBackPressed(); 
} 
+0

对不起,这是没有帮助( – Dem

+0

如果后'recyclerAdapter。 updateAdapter(unswerFromMain)'你调用'recyclerAdapter.notifyDataSetChanged()'? – drawinfinity

+0

我编辑我的主题,在那里我显示方法updateAdapter在这个方法中我使用notifyDataSetChanged(); – Dem

0

设置一个空数组到您的适配器,并通知

adapter.setItems(new ArrayList<MyPOJO>); 
adapter.notifyDataSetChanged(); 

编辑

你应该叫super.onBackpressed为上。像这样

@Override 

公共无效onBackPressed(){

recyclerView.removeAllViewsInLayout(); 
recyclerView.removeAllViews(); 
unswerFromMain.clear(); 
recyclerAdapter.updateAdapter(unswerFromMain); 
super.onBackPressed(); 

}

+0

我编辑我的主题并添加方法,我的适配器由空阵列。它没有帮助( – Dem

+0

@Dem我编辑我的文章 –

0

我发现了一个错误。

问题不在于清理适配器,而是清理了主要活动中的ArrayList。这个ArrayList包含一个字段内容1,当我在使用RecyclerView进行活动时,按下返回到主活动的Back按钮,已经填充了ArrayList数据内容1.然后,我选择了内容2并将其上的数据添加到刚刚添加到ArrayList。我完全删除了所有方法onBackPressed(),除了super.onBackPressed();和一切工作正常。谢谢你们 !

0

我与上述答案尝试不适合我。

所以我用隐藏和显示来处理RecyclerView。

recyclerview.setVisiblity(View.GONE);

recyclerview.setVisiblity(View。可见);

和我的逻辑是,

首先初始化一个int值全局等,INT点击= 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))在活性recyclerview已点击= 0

这样时间设定,简单的方式来显示和隐藏recyclerview以及后处理也处理。