2012-08-23 31 views
2

我看到關於notifyDataSetChanged()有許多問題。我已經瀏覽了其中的許多解決方案,但沒有任何解決方案適用於我。Android適配器notifyDataSetChanged()不清除以前的列表

我使用ArrayList來設置我的列表,並且在我的ArrayList更新後,我運行了notifyDataSetChanged()。新的列表被添加到前一個列表中。

可以說第一個列表是a,b,新列表是a,b,c。我最終得到的是a,b,a,b,c。 並且每次更新時都會再次出現新列表。我試過其他如invalidate(),適配器clear(),refreshDrawableState()等,並沒有任何工作。

預先感謝您。

這裏是簡化的代碼,即使在更改.xml文件中的代碼後,更改MainActivity將Activity擴展爲ListActivity的註釋也會使程序崩潰。

public class MainActivity extends Activity 
{ 
ArrayList<String> names = new ArrayList<String>(); 
ArrayAdapter arrayAdapter = null; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    ListView lv1 = (ListView) findViewById(R.id.listview); 
    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, names); 
    lv1.setAdapter(arrayAdapter); 

} 

//code here to edit the ArrayList names. 

public void onResume() 
{ 
    super.onResume(); // Always call the superclass method first 

    //the activity need to be updated everytime it resumes. 
    arrayAdapter.notifyDataSetChanged(); 

} 
} 
+0

檢查你的名字。 –

+0

可能問題出在你正在更新ArrayList的代碼中。你能分享嗎? ArrayList在某些方面很棘手,如何替換整個列表內容並不明顯。在放置新元素之前,您是否調用clear()? – sandrstar

+0

我不清楚你是否希望新列表包含a,b,a,b,c或只是a,b,c。你是否正確地更新了'ArrayList'的內容? – Spinner

回答

0

好像你沒有正確更新數組列表。更新後請嘗試記錄數組列表內容。

+0

你們是絕對正確的。它只是我自己失敗的邏輯導致了這個問題..代碼本身工作得很好。 – user1610613

+1

good work user1610613 .. –

相關問題