Как я вызываю getString () внутри метода onBindViewHolder () представления переработчика? - PullRequest
0 голосов
/ 11 октября 2018

Context

Я создаю RecyclerAdapter для отображения информации о прогнозе на определенный день.Мой RecyclerView содержит несколько дней, каждый из которых изменяется с помощью onBindViewHolder.

Макет каждого дня имеет 3 текстовых представления.Первый содержит строку, которая является сводкой.Второй содержит строку с двойным в качестве позиционного аргумента, который представляет низкую температуру.Третий идентичен второму, но представляет высокую температуру.

Ниже приведен код моего метода onBindViewHolder:

@Override
public void onBindViewHolder(@NonNull DailyForecastAdapter.ViewHolder viewHolder, int i) {

    Datum datum = forecast.get(i);

    TextView summary = viewHolder.summaryTextView;
    TextView tempHigh = viewHolder.tempHighTextView;
    TextView tempLow = viewHolder.tempLowTextView;

    summary.setText(datum.getSummary());
    tempHigh.setText(datum.getTemperatureHigh());
    tempLow.setText(datum.getTemperatureLow());
}

Выпуск

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

<string name="temperature_high">High of %1$.2f</string>
<string name="temperature_low">Low of %1$.2f</string>

За пределами класса RecyclerAdapter Я знаю, как это сделать, ниже - пример того, как я форматирую строку внутрифрагмент:

 String moddedString = String.format(getString(R.string.temperature), temp);
 ((TextView)activity.findViewById(R.id.temperatureDisplay)).setText(moddedString);

Однако У меня нет доступа к функции getString() внутри RecyclerAdapter , поэтому я не могу правильно отформатировать строку, чтобы вставить нужную температуру безполностью переопределяя строку с двойным.

Вопрос

Как использовать getString() в методе onBindViewHolder()?

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Как использовать getString () внутри метода onBindViewHolder ()?

Каждый экземпляр ViewHolder имеет поле itemView, которое является экземпляром View.Каждый экземпляр View имеет метод getContext();Вы можете использовать это для доступа к ресурсам.

String text = viewHolder.itemView.getContext().getString(R.string.mystring);
0 голосов
/ 11 октября 2018

Вы можете сохранить локальную копию Context с помощью конструктора вашего класса RecyclerViewAdapter:

public class YourRecyclerViewAdapter extends RecyclerView.Adapter<YourRecyclerViewAdapter.ViewHolder> {


    private Context context;


    public YourRecyclerViewAdapter(Context context) {
        this.context = context;
    }


    @Override
    public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
        String string = context.getString(R.string.your_string);
    }
0 голосов
/ 11 октября 2018

Вы можете получить строковый ресурс, используя контекст.

  context.getString(R.string.temperature)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...