2012-03-17 73 views
14

這是我的代碼列表視圖不notifydatasetchanged()調用

listview =(ListView) findViewById(R.id.lv1); 


    ArrayList<SClass> Monday = new ArrayList<SClass>(); 

    SClass s1=new SClass(); 
    s1.sName="samp"; 
    s1.salary=1000; 
    Monday.add(s1); 
    temp=Monday; 
    adapter = new CustomAdap(this, temp); 
    listview.setAdapter(adapter); 

上面的代碼工作fine.But當我我的代碼更改爲這個

listview =(ListView) findViewById(R.id.lv1); 


    adapter = new CustomAdap(this, temp); 

    SClass s1=new SClass(); 
    s1.sName="samp"; 
    s1.salary=1000; 
    Monday.add(s1); 
    temp=Monday; 

    listview.setAdapter(adapter); 
    adapter.notifyDataSetChanged(); 

列表視圖不顯示anything.what更新問題是什麼?

+0

如果你提供的源CustomAdap和週一,以及其中週一宣佈這將是更清晰。 – louielouie 2012-03-17 05:51:13

+0

我已經添加了customadap的代碼,monday是SClass的Arraylist – 2012-03-17 05:58:54

+0

@TariqIbrahim你可以看到http://stackoverflow.com/questions/28148618/listview-not-refreshing-after-click-on-button – 2015-01-27 13:01:53

回答

17

它看起來像你正在改變你初始化適配器的集合。我會改變這樣的代碼:

// initial setup 
listview =(ListView) findViewById(R.id.lv1); 
ArrayList<SClass> Monday = new ArrayList<SClass>(); 
adapter = new CustomAdap(this, Monday); 
listview.setAdapter(adapter); 

// change your model Monday here, since it is what the adapter is observing 
SClass s1=new SubjectClass(); 
s1.sName="samp"; 
s1.salary=1000; 
Monday.add(s1); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 

請注意,如果您CustomAdap是ArrayAdapter的一個子類,你也可以這樣做

// change your array adapter here 
SClass s1=new SubjectClass(); 
s1.sName="samp"; 
s1.salary=1000; 
adapter.add(s1); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 

編輯:據我瞭解越多,你現在要做什麼感謝您的評論。您可能希望讓適配器用您不同的ArrayList替換其內容。我會讓你的CustomAdap成爲ArrayAdapter的一個子類。

然後你就可以利用這種方式:

// replace the array adapters contents with the ArrayList corresponding to the day 
adapter.clear(); 
adapter.addAll(MONDAY); 

// notify the list that the underlying model has changed 
adapter.notifyDataSetChanged(); 
+0

我的使用溫度的目的是因爲,我有不同的數組列表,星期一星期二等。我想複製在不同的日期顯示不同的內容,這就是爲什麼我使用一個ArrayList的temp.and溫度可以從任何的ArrayList週一的分配值,週二等 – 2012-03-17 06:19:25

+0

沒有叫中的addAll – 2012-03-17 06:50:36

+2

你CustomAdap方法將要繼承ArrayAdapter,其中包括'clear'和'addAll'。像'公共類CustomAdap東西擴展ArrayAdapter '。請參閱http://developer.android.com/reference/android/widget/ArrayAdapter.html以供參考。 – louielouie 2012-03-17 06:53:27

5

爲什麼它在第一個代碼中工作?

---因爲你的值設置爲temp列表,並給它傳遞adapter,它顯示了它變成listview

爲什麼不能在第二個代碼中工作?

---因爲你設置你的設定值到臨時
第二前溫度到適配器遠,當你..that因爲設置新的價值的臨時適配器類可能沒有得到更新值溫度不公開或不在課堂級別或不是靜態的 .. 將temp聲明放在根級別並嘗試。

如果您收到任何警告,請按照要求和Logcat顯示您的完整代碼。

+0

你是什麼意思通過根級? – 2012-03-17 05:59:59

+0

我的意思是說在課堂/活動水平.. – MKJParekh 2012-03-17 06:31:14

+1

@MKJParekh很好的解釋。它幫助了我。謝謝 – 2012-11-16 09:09:02

4

檢查在正確的xml文件中的引用視圖的鏈接。或者至少檢查是否存在所述xml文件。

3

您使用的是哪種適配器?很明顯,在你設置你的臨時變量中的數據後,你的適配器沒有得到更新。

+0

那麼我們該如何得到它? – 2015-08-04 09:04:24

相關問題