Получение доступа к ресурсам из ArrayAdapter в Android - PullRequest
8 голосов
/ 21 ноября 2011

У меня определены некоторые ресурсы, например:

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

... и у меня есть ArrayAdapter, отображающий элементы в TextViews.Я пытаюсь получить доступ к значениям с помощью кода вроде:

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

... но я получаю сообщения об ошибках типа «Метод getResources () не определен для типа ContinuityAdapter».(ContinuityAdapter расширяет ArrayAdapter)

Есть ли хороший способ обойти это?

Спасибо

Это пример:

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;
}

Первый случай даетошибка, а вторая не использует, но не использует значение из файла XML.Хотя, как вы говорите, я могу просто использовать значение R ... до тех пор, пока я использую его везде.Просто не уверен, считается ли это «лучшей практикой».Спасибо

1 Ответ

23 голосов
/ 21 ноября 2011

Вам нужен Context объект для вызова Context.getResources () . Обычно вы можете передать Context или его подкласс (то есть Activity) через конструктор вашего пользовательского адаптера.

Как:

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

и затем используйте:

mContext.getResources()...

Редактировать : Это похоже на случай, чтобы избежать переключения. См:

...