【问题标题】:clean RecyclerView after tap to button Back点击返回按钮后清理 RecyclerView
【发布时间】:2017-03-06 16:10:49
【问题描述】:

我有一个 RecyclerView,其中填充了从服务器响应接收到的项目列表。

首先,用户输入一个日志/密码,选择一个具体的内容,比如:1个内容。

登录后,用户使用 has 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();

}

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

【问题讨论】:

  • 你必须清除适配器,然后使用 adapter.notifydatasetchange 和最后一行用户 super.onBackPressed();
  • 但我做到了...
  • recyclerAdapter.notifyDataSetChanged();
  • 我放了,没用((我放了空的 ArrayList,我放了清除 ArrayList - 在我调用方法 updateAdapter 后,包含 notifyDataSetChanged();

标签: android android-recyclerview onbackpressed


【解决方案1】:

我相信这是因为您在做任何其他事情之前先致电onBackPressed()。这意味着那些其他行永远不会运行。尝试交换它:

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

【讨论】:

  • 对不起,这没有帮助(
  • 如果在recyclerAdapter.updateAdapter(unswerFromMain) 之后你调用recyclerAdapter.notifyDataSetChanged() 怎么办?
  • 我编辑了我的主题,在这里我展示了方法 updateAdapter。在这种方法中,我使用 notifyDataSetChanged();
【解决方案2】:

在适配器中设置一个空数组并通知

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

编辑

你应该最后调用 super.onBackpressed。像这样

@Override

public void onBackPressed() {

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

}

【讨论】:

  • 我编辑我的主题并添加方法,我调用它来通过空数组更新我的适配器。 its didnt help(
【解决方案3】:

我发现了一个错误。

问题不在于清理适配器,它没有清理来自主要活动的 ArrayList。这个 ArrayList 包含一个字段内容 1,当我在 RecyclerView 的活动中并按下返回到主活动的返回按钮时,已经填充了 ArrayList 数据内容 1。然后我选择了内容 2,它上面的数据刚刚添加到末尾数组列表。

我完全删除了onBackPressed()的所有方法,除了super.onBackPressed();一切正常。谢谢大家!

【讨论】:

    【解决方案4】:

    我试过上面的答案对我不起作用。

    所以我已经通过隐藏和显示来处理 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);) recyclerview 时设置 Clicked =0

    因此,显示和隐藏 recyclerview 以及 backpress 的简单方法也得到了处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 2014-10-05
      • 1970-01-01
      • 2012-05-12
      • 2016-10-24
      • 1970-01-01
      相关资源
      最近更新 更多