如何在回收者视图的onBindViewHolder()方法内调用getString()?

isa*_*bob 7 android android-studio recycler-adapter

语境

我正在创建一个RecyclerAdapter来显示某一天的天气预报信息。我的RecyclerView包含多天,每一天都可以通过onBindViewHolder进行修改。

每天的布局有3个文本视图。第一个包含作为摘要的字符串。第二个包含一个字符串,该字符串的位置参数为double,代表低温。第三个与第二个相同,但是代表高温。

下面是我的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());
}
Run Code Online (Sandbox Code Playgroud)

问题

由于高温和低温是double,因此我需要相应地格式化字符串,以免我只用double值覆盖字符串。这是高温和低温的字符串资源:

<string name="temperature_high">High of %1$.2f</string>
<string name="temperature_low">Low of %1$.2f</string>
Run Code Online (Sandbox Code Playgroud)

在RecyclerAdapter类之外,我知道如何执行此操作,以下是如何在Fragment中格式化字符串的示例:

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

但是,我没有访问getString()RecyclerAdapter内部的函数的权限,因此我无法正确格式化字符串以插入所需的温度,而不会用双精度完全覆盖String。

如何getString()onBindViewHolder()方法内部使用?

Ben*_* P. 13

如何在onBindViewHolder()方法中使用getString()?

每个ViewHolder实例都有一个itemView字段,该字段是的一个实例View。每个View实例都有一个getContext()方法。您可以使用它来访问资源。

String text = viewHolder.itemView.getContext().getString(R.string.mystring);
Run Code Online (Sandbox Code Playgroud)

  • 这个答案更好,因为它是独立的,并且不需要额外的推论来使它起作用。此外,我不必在方法的本地范围之外公开上下文,因为我评论了@Ramesh 的回答。 (2认同)