2017-03-06 143 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以及後處理也處理。