2010-02-03 42 views
10

Tôi khá mới phát triển Android (bắt đầu cách đây 2 ngày) và đã trải qua một số hướng dẫn rồi. Tôi đang xây dựng một ứng dụng thử nghiệm từ bài tập NotePad (Link to tutorial) trong SDK Android và là một phần của danh sách ghi chú Tôi muốn hiển thị một hình ảnh khác tùy thuộc vào nội dung của trường cơ sở dữ liệu mà tôi gọi là "notetype". Tôi muốn hình ảnh này xuất hiện trong chế độ xem Danh sách trước mỗi mục nhập notepad.Android: Thay đổi một ImageView src tùy thuộc vào dữ liệu trường cơ sở dữ liệu

Mã trong file java của tôi là:

private void fillData() { 
    Cursor notesCursor = mDbHelper.fetchAllNotes(); 

    notesCursor = mDbHelper.fetchAllNotes(); 
    startManagingCursor(notesCursor); 

    String[] from = new String[]{NotesDbAdapter.KEY_NOTENAME, NotesDbAdapter.KEY_NOTETYPE}; 

    int[] to = new int[]{R.id.note_name, R.id.note_type}; 

    // Now create a simple cursor adapter and set it to display 
    SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, from, to); 
    setListAdapter(notes); 
} 

Và bố trí tập tin xml của tôi (notes_row.xml) trông như thế này:

<ImageView android:id="@+id/note_type" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:src="@drawable/default_note"/> 
<TextView android:id="@+id/note_name" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

Tôi chỉ thực sự không có đầu mối như thế nào tôi d đi về lấy quyền vẽ tùy thuộc vào loại ghi chú đã được chọn. Tại thời điểm này tôi có khả năng chọn loại từ một Spinner, vì vậy những gì được lưu trữ trong cơ sở dữ liệu là một số nguyên. Tôi đã tạo ra một số hình ảnh tương ứng với các số nguyên nhưng nó dường như không chọn những thứ lên.

Mọi trợ giúp sẽ được đánh giá cao. Nếu bạn cần thêm thông tin thì vui lòng cho tôi biết.

Trả lời

24

Bạn có thể muốn thử sử dụng ViewBinder. http://d.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html

Ví dụ này sẽ giúp:

private class MyViewBinder implements SimpleCursorAdapter.ViewBinder { 

    public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
     int viewId = view.getId(); 
     switch(viewId) { 
      case R.id.note_name: 

       TextView noteName = (TextView) view; 
       noteName.setText(Cursor.getString(columnIndex)); 

      break; 
      case R.id.note_type: 

       ImageView noteTypeIcon = (ImageView) view; 

       int noteType = cursor.getInteger(columnIndex); 
       switch(noteType) { 
        case 1: 
         noteTypeIcon.setImageResource(R.drawable.yourimage); 
        break; 
        case 2: 
         noteTypeIcon.setImageResource(R.drawable.yourimage); 
        break; 
        etc… 
       } 

      break; 
     } 
    } 

}

Sau đó thêm nó vào bộ chuyển đổi của bạn với

note.setViewBinder(new MyViewBinder()); 
+0

Tuyệt vời - hoạt động hoàn hảo. Không thể yêu cầu một giải pháp dễ dàng hơn :). Bạn có lời cảm ơn chân thành của tôi! – Butteredchops

+0

câu trả lời tuyệt vời! cảm ơn bạn! –

+0

Tôi muốn thêm rằng bạn không phải bao gồm tất cả các trường hợp trong 'setViewValue', chỉ dành cho ImageView. Đối với tất cả các Chế độ xem khác, bạn chỉ cần trả về 'false' và trong trường hợp này, Android sẽ áp dụng ràng buộc bình thường mà bạn đã cung cấp cho SimpleCursorAdapter. – damluar

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