2008-11-13 35 views
20

Tôi đang sử dụng ListView để hiển thị màn hình chính của ứng dụng.
Màn hình chính về cơ bản là menu để truy cập vào các phần ứng dụng khác nhau. Hiện tại, tôi có ListView có nội dung được thêm theo chương trình trong phương thức onCreate.Làm cách nào để tạo biểu tượng cho các mục menu trong ListView của Android?

Dưới đây là đoạn mã mà thực hiện điều này:

String[] mainItems = { 
    "Inbox", "Projects", "Contexts", "Next Actions" 
} 

@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(R.layout.main); 

    setListAdapter(new ArrayAdapter<String>(
      this, android.R.layout.simple_list_item_1, mainItems)); 
    registerForContextMenu(getListView()); 
} 

Vì vậy, menu cơ bản chỉ là một loạt các nút với các văn bản có trong mảng mainItems. Tôi biết rằng tôi có thể tạo bố cục XML (ví dụ: R.layout.mainMenu_item) có một ImageView và TextView trong đó, nhưng tôi không chắc chắn cách đặt biểu tượng của ImageView. Tôi đã thấy rằng có một phương thức setImageResouce (int resId), nhưng cách để sử dụng phương thức này khi tạo ra với một ArrayAdapter đang cản trở tôi. Có cách nào tốt hơn để làm điều này?

Trả lời

15

Điều tôi thường làm cho một ListView là triển khai Bộ điều hợp của riêng mình bằng cách mở rộng lớp BaseAdapter tiện dụng. Một trong những phương thức trừu tượng mà bạn sẽ thực hiện sẽ là getView() như là poster trước được đề cập. Từ đó bạn có thể thổi phồng một bố cục chứa một ImageView, lấy một tham chiếu đến nó bằng cách sử dụng findViewById và đặt hình ảnh thành bất kỳ thứ gì bạn có thể vẽ được vào tài nguyên của mình.

public View getView(int position, View convertView, ViewGroup parent) { 

    View row = inflater.inflate(R.layout.menu_row, null); 

    ImageView icon = (ImageView) row.findViewById(R.id.icon); 
    icon.setImageResource(..your drawable's id...); 

    return view; 
} 
+12

Lưu ý rằng bạn thực sự cần xem xét convertView và chỉ tăng thêm các hàng mới nếu bạn thật sự cần chúng. Nếu convertView không phải là null, nó là một số hàng trước bạn tăng cao trước, lên để tái chế. Chỉ cần đặt lại biểu tượng và trả về hàng tái chế. Ít rác được tạo ra, thực hiện nhanh hơn. – CommonsWare

1

Từ tài liệu google cho ArrayAdapter.

Để sử dụng một cái gì đó khác hơn là TextView cho màn hình hiển thị mảng, ví dụ, ImageViews, hoặc có một số dữ liệu ngoài toString() kết quả điền vào quan điểm, ghi đè getView (int, View, ViewGroup) để trả lại kiểu xem bạn muốn.

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