2017-10-19 35 views
0

在我的應用我有一個Activity並在此Activity,它顯示的項目與RecyclerViewAdapter幫助清單,並獲取從項目數據庫。如何更新recyclerview的項目,當我回來的列表中的Android

在數據庫中,我有一個名爲Place的表,其中有7個字段,其中一個字段爲interest,其中默認值爲0和整數數據類型。

當我點擊列表中的一個項目時,會打開新的Activity,其中包含該項目的所有詳細信息。其中一個細節是interest。 的值爲Star圖標。如果值爲0,則圖標爲黑色,否則爲金色。

該部分工作。當我單擊Star圖標時,數據庫中的圖標和值interest字段成功更改。但是,我的問題是:

當我回到Activity顯示項目列表並返回到該特定項目時,Star圖標的更改未反映。例如:首先圖標是黑色的,我通過點擊圖標來更改圖標並將其更改爲黃金,並將interest字段的值更新爲1.只有完全關閉應用程序並再次打開時,所做的更改才能正確顯示。

任何想法?

+0

@UltimateDevil正確,好的。 – AREF

回答

2

您可以從您的適配器調用notifyDataSetChanged()方法,如果你不知道你是在recyclerView你的數據的位置。

然而更好地從你的適配器調用notifyItemChanged(position)方法只更新該特定recyclerView對象的視圖。

+0

在適配器我可以發送項目的位置到第二個活動,當回到onActivityResult方法中的第一個活動我調用notifyItemChanged(位置)正確?? – AREF

+0

如果我理解正確的話,是的,我們沒有任何代碼片斷,所以這會讓問題變得更加困難。 –

1

您必須將已更改的Place對象從All Details Activity傳回到項目列表Activity,然後通知並更改適配器中的項目。

首先,你必須與監聽結果開始的活動:

Intent intent = new Intent(this, AllDetailsActivity.class) 
intent.putExtra("place", place); 
startActivityForResult(intent, 1000) 

當您更改並確認更改上的所有細節屏幕上,您必須返回更改的對象和結果是這樣的:

setResult(Activity.RESULT_OK, new Intent().putExtra("returned_place", place)); 

然後你必須執行onActivityResult裏面你有一個這樣的對象列表:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(request == 1000 && resultCode == Activity.RESULT_OK) { 
     adapter.changeItem(position, (Place) 
     data.getExtras().get("returned_place")) 
    } 
} 

和適配功能改變的項目應該是這樣的:

public void changeItem(int position, Place place) { 
    items.set(position, place); 
    notifyItemChanged(position); 
} 

你也必須保存點擊位置目標的位置,知道你要更新的細胞。

相關問題