2012-03-17 24 views
14

Đây là mã của tôilistview không cập nhật với notifydatasetchanged() gọi

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); 

Đoạn mã trên làm việc fine.But khi tôi thay đổi mã của tôi để

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(); 

listview này không hiển thị anything.what là vấn đề?

+0

này sẽ rõ ràng hơn nếu bạn cung cấp nguồn cho CustomAdap và Thứ Hai, cũng như nơi thứ hai được khai báo. – louielouie

+0

tôi đã thêm mã cho customadap và thứ hai là một Arraylist của SClass –

+0

@TariqIbrahim bạn có thể xem http://stackoverflow.com/questions/28148618/listview-not-refreshing-after-click-on-button –

Trả lời

17

Dường như bạn đang thay đổi bộ sưu tập mà bạn đã khởi tạo bộ điều hợp. Tôi sẽ thay đổi mã của bạn theo cách này:

// 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(); 

Lưu ý rằng nếu CustomAdap của bạn là một lớp con của ArrayAdapter, bạn cũng có thể đã làm

// 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(); 

EDIT: Tôi hiểu hơn những gì bạn muốn làm bây giờ nhờ bình luận của bạn. Có thể bạn sẽ muốn có adapter thay thế nội dung của nó với ArrayLists khác nhau của bạn sau đó. Tôi sẽ làm cho CustomAdap của bạn trở thành một lớp con của ArrayAdapter.

Sau đó, bạn có thể sử dụng nó theo cách này:

// 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

Mục tiêu của tôi để sử dụng tạm thời là vì, tôi có các danh sách mảng khác nhau, thứ hai thứ hai, v.v.Tôi muốn sao chép nội dung hiển thị khác nhau vào những ngày khác nhau, đó là lý do tại sao tôi sử dụng một danh sách mảng temp.and temp có thể được chỉ định các giá trị từ bất kỳ mảng danh sách thứ hai, thứ ba, v.v. –

+0

không có phương pháp nào được gọi là addAll –

+2

CustomAdap của bạn sẽ phải phân lớp ArrayAdapter, bao gồm 'clear' và' addAll'. Một cái gì đó như 'lớp công khai CustomAdap mở rộng ArrayAdapter '. Vui lòng xem http://developer.android.com/reference/android/widget/ArrayAdapter.html để tham khảo. – louielouie

5

Tại sao mã hoạt động trong mã đầu tiên?

--- Bởi vì bạn đang thiết lập các giá trị cho temp Danh sách và đi qua nó là adapter và nó cho thấy nó vào listview.

Tại sao không hoạt động trong mã thứ hai?

--- Bởi vì bạn đang thiết tạm adapter xa trước khi bạn đặt giá trị vào tạm
thứ hai, lớp adapter của bạn có thể không nhận được giá trị cập nhật khi bạn thiết lập giá trị mới cho tạm ..that vì temp không công khai hoặc không ở cấp lớp hoặc không tĩnh .. Đặt tuyên bố tạm thời ở cấp cơ sở và thử.

Và vui lòng hiển thị mã đầy đủ của bạn nhiều như được yêu cầu và Logcat nếu bạn nhận được bất kỳ cảnh báo nào.

+0

ý của bạn là gì theo cấp độ gốc? –

+0

Tôi muốn nói ở cấp lớp/hoạt động .. – MKJParekh

+1

@MKJParekh Giải thích tốt đẹp. Nó đã giúp đỡ tôi. Cảm ơn –

4

Kiểm tra liên kết đến chế độ xem được tham chiếu của bạn trong tệp xml thích hợp. Hoặc ít nhất hãy kiểm tra sự tồn tại của tập tin xml đã nói.

3

Bạn đang sử dụng bộ điều hợp nào? Rõ ràng là trường hợp bộ điều hợp của bạn không được cập nhật sau khi bạn đặt dữ liệu trong biến tạm thời của mình.

+0

vì vậy làm thế nào chúng ta có thể nhận được điều đó? –

Các vấn đề liên quan