2013-01-15 46 views
10

Tôi đang gặp một số sự cố khi cố xóa một mục khỏi chế độ xem danh sách khi nhấp chuột dài. Dưới đây là các mã:android - xóa mục khỏi ListView khi nhấp chuột dài

public class MListViewActivity extends ListActivity { 

private ListView lv; 
private String[] some_data = null; 

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

    some_data = getResources().getStringArray(R.array.mdata); 

    // Bind resources Array to ListAdapter 
    ArrayAdapter<String> myAdapter = new ArrayAdapter<String>(this, 
      R.layout.list_item, R.id.label, some_data); 
    this.setListAdapter(myAdapter); 

    lv = getListView(); 
    lv.setDividerHeight(3); 

    lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, 
       int arg2, long arg3) { 

      // Can't manage to remove an item here 

      return false; 
     } 
    }); 
} 

Any help is appreciated

+0

Cụ thể hơn. Lỗi, ngăn xếp dấu vết, những gì không hoạt động, những gì bạn không thể quản lý? – jlindenbaum

+1

Bạn nên cân nhắc việc sử dụng điều này nếu bạn có thanh tác vụ trong ứng dụng của mình http://developer.android.com/guide/topics/ui/menus.html#context-menu ngoài câu trả lời của @TNR –

Trả lời

14

Bạn không nên sử dụng Arrays, bạn nên sử dụng ArrayList để loại bỏ và thêm các mục vào một Listview.

Khi kích thước mảng được khai báo, bạn có thể sửa đổi dữ liệu trong chỉ mục cụ thể nhưng không thể xóa các mục hoặc thêm vào nó.

Vì vậy, hãy lấy một ArrayList và chỉ khi bạn bấm lâu vào mục ListView, chỉ cần gọi loại bỏ phương pháp của Arraylist và thông báo cho tập dữ liệu thay đổi.

Ví dụ:

ArrayList<String> al = new ArrayList<String>(); 

bên longclick bạn viết mã dưới đây để loại bỏ mục.

al.remove(arg2);//where arg2 is position of item you click 
myAdapter.notifyDataSetChanged(); 
9

thử

lv.setOnItemLongClickListener(new OnItemLongClickListener() { 

    @Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, 
      int position, long arg3) { 

       myAdapter.remove(some_data[position]); 
       myAdapter.notifyDataSetChanged(); 

     return false; 
    } 

}); 
+0

ném ra một ngoại lệ không được hỗ trợ – Droidman

+0

chính xác là tôi đang tìm kiếm. Nếu bạn đang sử dụng ListView hoặc bất kỳ lớp con nào của nó, hãy sử dụng phương thức trên để lấy mục được giữ trong danh sách – Clocker

-1

Tôi có vấn đề sử dụng phương pháp này. và tôi đã giải quyết nó bằng cách sử dụng này.

  listStat.remove(listStat.get(arg2)); 
      lvStat.requestLayout(); 
      adapterStat.notifyDataSetChanged(); 

Tôi nghĩ điều này sẽ giúp ích cho người khác.

+0

Tôi đang gặp vấn đề tương tự. 'LvStat' ở đây trong mã của bạn là gì? – Chip

+0

@pc listview reference –

+0

Tôi có 'VideoView',' ImageView' và 'TextView' trong ListView của tôi. Hoạt động của nó cho 'ImageView' và' TextView' nhưng không hoạt động cho 'VideoView' – Chip

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