2010-08-12 32 views
20

Tôi vừa mới khởi động Android và tôi đang gặp phải một số sự cố.
Tôi đã tạo một ListView được điền từ cơ sở dữ liệu.
Mỗi hàng có một nút để xóa mục khỏi danh sách và cơ sở dữ liệu.Chuyển thông số cho người nghe onclick trên một nút trong hàng listview

Tôi có thể kết nối một trình xử lý sự kiện với nút nhưng tôi không thể xác định bản ghi cơ sở dữ liệu phù hợp sẽ bị xóa.

Lớp học của tôi được hiển thị bên dưới

public class FeedArrayAdapter extends ArrayAdapter<Feed> implements OnClickListener 
{ 
    private ARssEReaderDBAdapter dba; 
    private String TAG = "FeedArrayAdapter"; 

    public FeedArrayAdapter(Context context, int textViewResourceId, List<Feed> items)   { 
    super(context, textViewResourceId, items); 
    Log.w(TAG, "List"); 


    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     Log.w(TAG, "getView"); 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.feedlistrow, null); 
    } 
    Feed feed = getItem(position); 
    if (feed != null) { 
     TextView title = (TextView)v.findViewById(R.id.TextView01); 
     if (title != null) { 
      title.setText(feed.getTitle()); 
     } 
     Button btnDelete = (Button)v.findViewById(R.id.btnDelete); 
     btnDelete.setOnClickListener(this); //btnDeleteFeedListener 
    } 
    return v; 
} 

public void onClick(View v) { 
    Log.w(TAG, "something got clicked: "); 
} 

Vậy làm thế nào tôi có thể vượt qua các cơ sở dữ liệu ghi lại căn cước để xử lý vì vậy tôi có thể sử dụng các bộ chuyển đổi cơ sở dữ liệu để xóa nó?

Trả lời

39

Bạn nên lưu trữ ID của bản ghi trong Tag, gọi setTag() trên quan điểm của bạn, và để đọc trong onclick gọi getTag()

22

Tạo lớp bên trong triển khai OnClickListener và sau đó chuyển biến vị trí trong hàm tạo.

private Class MyClickListener implements OnClickListener { 

    private int position; 

    public MyClickListener(int position) { 
     this.position = position; 
    } 

    public void onClick(View v) { 
     System.out.println("position " + getPosition() + " clicked."); 
    } 

    public int getPosition() { 
     return position; 
    } 

} 
+0

Cám ơn câu trả lời của bạn, các tùy chọn Tag dường như là dễ dàng nhất để thực hiện và làm tất cả những gì tôi muốn nó làm :) Cảm ơn một lần nữa – Richard

+1

Tôi thích câu trả lời này vì setTag() của tôi đã được sử dụng cho một thứ khác. –

+0

Điều này hiệu quả khi tôi cần chuyển nhiều giá trị cho người nghe nhấp chuột! Cảm ơn – speedynomads

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