2011-11-21 21 views
6

Tôi có một số tài nguyên được xác định, ví dụ .:Tiếp cận được các nguồn lực từ một ArrayAdapter trong Android

<color name="lightGrey">#FFCCCCCC</color> 
<integer name="KEY_POSITION_ARM">2</integer> 

... và tôi có một ArrayAdapter hiển thị các mục để TextView. Tôi đang cố truy cập các giá trị có mã như:

keyPosition = getResources().getInteger(R.integer.KEY_POSITION_ARM); 
moduleDataView.setTextColor(getResources().getColor(R.color.darkgreen)); 

... nhưng tôi gặp lỗi như "Phương thức getResources() không xác định cho loại ContinuityAdapter". (ContinuityAdapter mở rộng ArrayAdapter)

Có cách nào tốt để giải quyết vấn đề này không?

Cảm ơn

Đây là một ví dụ:

switch (currentModule.keyPosition) { 
case activity.getResources().getInteger(R.integer.KEY_POSITION_ARM): 
    moduleDataView.keyPosition.setText("TEST"); 
    moduleDataView.keyPosition.setTextColor(Color.GREEN); 
    break; 
case R.integer.KEY_POSITION_ARM: 
    moduleDataView.keyPosition.setText("ARM"); 
    moduleDataView.keyPosition.setTextColor(Color.RED); 
    break; 
} 

Các trường hợp đầu tiên đưa ra một lỗi, và lần thứ hai không nhưng không sử dụng giá trị từ tập tin XML hoặc. Mặc dù như bạn nói tôi chỉ có thể sử dụng giá trị R ... miễn là tôi sử dụng nó theo cách đó ở khắp mọi nơi. Chỉ cần không chắc chắn nếu điều này được coi là 'thực hành tốt nhất'. Cảm ơn

Trả lời

17

Bạn cần một đối tượng Context để gọi phương thức Context.getResources(). Thông thường, bạn có thể vượt qua một Ngữ cảnh hoặc phân lớp của nó (tức là Hoạt động) thông qua hàm tạo của bộ điều hợp tùy chỉnh của bạn.

Giống như:

public ContinuityAdapter extends ArrayAdapter { 
    private final Context mContext; 
    ... 
    public ContinuityAdapter(Context context) { 
     mContext = context; 
    } 
} 

và sau đó sử dụng:

mContext.getResources()... 

Sửa: này dường như là trường hợp để tránh tắc. Xem:

+0

Cảm ơn. Tôi đã thử nó và tôi nghĩ rằng nó không hoạt động, nhưng bây giờ tôi nhận ra rằng tôi đã nhận được một lỗi khác làm: 'switch (foo) { case activity.getResources(). GetInteger (R.integer.KEY_POSITION_ARM):' The tuyên bố trường hợp rõ ràng đòi hỏi một biểu thức liên tục, mặc dù tài nguyên là hằng số. Tôi có bị mắc kẹt khi sử dụng câu lệnh if? – ARQuattr

+0

Tôi cần xem thêm mã. Nói chung, tôi đã cố gắng tránh các trường hợp chuyển đổi hoặc tôi sử dụng id tài nguyên trực tiếp (ví dụ: trường hợp R.id.xyz). – user802421

+0

Tôi đã chỉnh sửa câu hỏi để bao gồm một ví dụ về mã tốt hơn. Cảm ơn – ARQuattr

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