2014-10-09 178 views
1

NotifyDataSetChanged()不會更新我的ListView,即使我正在重讀序列化的xml文件。它只在oncreate被再次調用後才更新。閱讀一些Java代碼,它告訴我重新填充我的listadapter,但仍然不起作用。有任何想法嗎?NotifyDataSetChanged不更新我的ListView

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
      { 

       View view = inflater.Inflate(Resource.Layout.Card, null); 

       listView = view.FindViewById<ListView>(Resource.Id.cardListView); 

       return view; 
      } 


      public override void OnResume() 
      { 
       base.OnResume(); 
       List<string> nameList = new List<string>(); 
       string documentsPath = Android.OS.Environment.ExternalStorageDirectory + "/Gate"; 
       var cardPath = Path.Combine(documentsPath, "card.xml"); 

       if (File.Exists(cardPath)) 
       { 
        XmlSerializer serializer = new XmlSerializer(typeof(List<Card>)); 
        StreamReader reader = new StreamReader(cardPath); 
        cardList = (List<Card>)serializer.Deserialize(reader); 
        reader.Close(); 
       } 
       else 
       { 
        cardList = new List<Card>(); 
       } 

       foreach (Card card in cardList) 
       { 
        nameList.Add(card.name); 
       } 

       var adapter = new ArrayAdapter<string>(this.Activity, Android.Resource.Layout.SimpleListItem1, nameList); 

       listView.Adapter = adapter; 

       adapter.NotifyDataSetChanged(); 
      } 
+0

你的意思是說listview是空的?你確定nameList有項目嗎? – 2014-10-09 19:25:24

+0

你能先告訴一下發生了什麼嗎?什麼樣的場景?用戶在做什麼? xml文件與「下一個」時間不同嗎? – greenapps 2014-10-09 21:08:53

+0

有一個活動添加了寫入xml文件的卡片。然後,當我恢復這個片段時,它應該重新讀取xml文件並使用新卡片更新列表。但現在它不會更新列表,除非再次調用oncreate()。 – user3344484 2014-10-10 16:46:24

回答

1

您應該只創建適配器一次,在OnCreate,並儲存起來。然後,在OnResume()中,只使用adapter.AddAll(nameList)更新值並調用NotifyDataSetChanged();

+0

與原生版本非常不同,我一直在反對這個問題幾分鐘,你指出最可靠的方式。 – ararog 2016-07-07 18:13:46

相關問題