2011-09-13 39 views
30

Trong ứng dụng của tôi, nếu bạn bấm vào một nút thì tôi muốn loại bỏ tất cả các mục listview. Ở đây, tôi đang sử dụng bộ điều hợp cơ bản để thêm các mục vào chế độ xem danh sách.Làm thế nào để loại bỏ listview tất cả các mục

Làm cách nào để xóa các mục trong listview một cách linh hoạt.

+1

hãy chuyển động getCount, để xóa đi không như getCount – Abhi

+7

listview.setAdapter (null); –

+0

Cảm ơn bạn Abhi, điều đó thực sự hữu ích. Ghi đè phương thức getCount .... – slodeveloper

Trả lời

32

Gọi setListAdapter() một lần nữa. Lần này với một ArrayList trống.

+1

ở đây tôi đang sử dụng baseadapter – naresh

+1

Ở đây nếu bạn bấm vào nút dữ liệu cũ listview mục sẽ được gỡ bỏ sau khi các mục mới sẽ được thêm vào danh sách xem. là nó có thể với điều này? – naresh

+0

Có, bạn có thể gọi setListAdaptor() với dữ liệu mới nếu cần. – mah

0

Di chuyển dữ liệu từ adapter và gọi adapter.notifyDataSetChanged();

+0

cách xóa dữ liệu khỏi adpater? – naresh

+0

trong khi tuyên bố bộ điều hợp bạn có thể đã vượt qua giá trị trong một số biểu mẫu ... xóa giá trị khỏi đó .... –

+0

Đó là câu hỏi. Cách xóa các mục khỏi bộ điều hợp. – JaydeepW

9

nếu bạn đã sử dụng đối tượng Danh sách và được chuyển tới bộ điều hợp, bạn có thể xóa giá trị khỏi đối tượng Danh sách và gọi hàm notifyDataSetChanged() bằng đối tượng bộ điều hợp.

ví dụ:

List<String> list = new ArrayList<String>(); 
ArrayAdapter adapter; 


adapter = new ArrayAdapter<String>(DeleteManyTask.this, 
      android.R.layout.simple_list_item_1, 
      (String[])list.toArray(new String[0])); 

listview = (ListView) findViewById(R.id.list); 
listview.setAdapter(adapter); 

listview.setAdapter(listAdapter); 

cho remove làm theo cách này

list.remove(index); //or 
list.clear(); 
adpater.notifyDataSetChanged(); 

hoặc không có danh sách đối tượng loại bỏ mục từ danh sách.

adapter.clear(); 
adpater.notifyDataSetChanged(); 
+0

Tôi đang sử dụng bộ điều hợp cơ sở. vì vậy tôi không có rõ ràng() metthod. làm thế nào để loại bỏ nó? – naresh

+0

bạn có thể shom tôi mã của bạn với chỉnh sửa vào câu hỏi của bạn? – Pratik

0

sử dụng bất kỳ một trong các tùy chọn dưới đây mà suites yêu cầu của bạn

listview.removeViews(1,listview.getChildCount()); 

hoặc

listview.removeViewInLayout(your view); 
20

ListView hoạt động dựa trên các dữ liệu cơ bản trong Adapter. Để xóa ListView bạn cần phải làm hai việc:

  1. Xóa dữ liệu bạn đã đặt từ bộ điều hợp.
  2. Làm mới xem bằng cách gọi notifyDataSetChanged

Ví dụ, xem bộ xương của SampleAdapter dưới đây mà mở rộng BaseAdapter


public class SampleAdapter extends BaseAdapter { 

    ArrayList<String> data; 

    public SampleAdapter() { 
     this.data = new ArrayList<String>(); 
    } 

    public int getCount() { 
     return data.size(); 
    } 

    public Object getItem(int position) { 
     return data.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     // your View 
     return null; 
    } 
} 

Ở đây bạn có ArrayList<String> data như dữ liệu cho Adaptor của bạn. Mặc dù bạn có thể không cần sử dụng ArrayList, bạn sẽ có thứ gì đó tương tự trong mã của mình để thể hiện dữ liệu trong ListView

Tiếp theo bạn cung cấp phương pháp xóa dữ liệu này, việc triển khai phương pháp này là xóa cấu trúc dữ liệu cơ bản


public void clearData() { 
    // clear the data 
    data.clear(); 
} 

Nếu bạn đang sử dụng bất kỳ lớp con nào của Collection, họ sẽ có phương thức clear() mà bạn có thể sử dụng như trên.

Một khi bạn có phương pháp này, bạn muốn gọi clearDatanotifyDataSetChanged trên onClick của bạn do đó mã cho onClick sẽ giống như thế:


// listView is your instance of your ListView 
SampleAdapter sampleAdapter = (SampleAdapter)listView.getAdapter(); 
sampleAdapter.clearData(); 

// refresh the View 
sampleAdapter.notifyDataSetChanged(); 
4

Tôi đã từng tuyên bố này và nó làm việc cho tôi:

setListAdapter(null) 

Điều này gọi một hàm tạo mặc định không có gì trong lớp mở rộng BaseAdapter.

+1

điều này sẽ phá vỡ android 2.1 –

3

Tôi chỉ xóa danh sách mảng, hãy thử values.clear();

values = new ArrayList<String>(); 
values.clear(); 

ArrayAdapter <String> adapter; 
adapter = new ArrayAdapter<String>(this, R.layout.list,android.R.id.text1, values); 
lista.setAdapter(adapter); 
7

Bạn chỉ có thể sử dụng

lv.setAdapter(null); 
Các vấn đề liên quan