通常我们在使用RecyclerView.Adapter时,需要给每个ViewHolder添加一个点击事件。我们可以为ForecastAdapter 类增添一个接口ForecastAdapterOnClickHandler 。并且我们修改ForecastAdapter的构造方法,将这个监听接口作为参数传递进来。
public class ForecastAdapter extends RecyclerView.Adapter<ForecastAdapter.ForecastAdapterViewHolder> {
private String[] mWeatherData;
private final ForecastAdapterOnClickHandler mClickHandler;
public interface ForecastAdapterOnClickHandler {
void onClick(String weatherForDay);
}
public ForecastAdapter(ForecastAdapterOnClickHandler clickHandler) {
mClickHandler = clickHandler;
}
public class ForecastAdapterViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
public final TextView mWeatherTextView;
public ForecastAdapterViewHolder(View view) {
super(view);
mWeatherTextView = (TextView) view.findViewById(R.id.tv_weather_data);
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int adapterPosition = getAdapterPosition();
String weatherForDay = mWeatherData[adapterPosition];
mClickHandler.onClick(weatherForDay);
}
}
@Override
public ForecastAdapterViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Context context = viewGroup.getContext();
int layoutIdForListItem = R.layout.forecast_list_item;
LayoutInflater inflater = LayoutInflater.from(context);
boolean shouldAttachToParentImmediately = false;
View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately);
return new ForecastAdapterViewHolder(view);
}
@Override
public void onBindViewHolder(ForecastAdapterViewHolder forecastAdapterViewHolder, int position) {
String weatherForThisDay = mWeatherData[position];
forecastAdapterViewHolder.mWeatherTextView.setText(weatherForThisDay);
}
@Override
public int getItemCount() {
if (null == mWeatherData) return 0;
return mWeatherData.length;
}
public void setWeatherData(String[] weatherData) {
mWeatherData = weatherData;
notifyDataSetChanged();
}