使用RecyclerView展示一组天气信息, item的布局文件为item_layout,包含三个控件tv_weather,tv_high和tv_low,分别显示天气状况、最高气温和最低气温。当单击某个天气item时,跳转到天气详情页面WeatherInfoActivity,并把该天的天气信息传递到页面中。(假设天气信息已使用Gson解析到List<Weather>类型的变量list中)。
- 请根据以上描述,编写循环列表的适配器WeatherAdapter。
public class WeatherAdapter extends RecyclerView.Adapter<WeatherAdapter.WeatherHolder> {
private Context mContext; // mContext保存页面传递的Context
private List<Weather> mList=new ArrayList<>(); //Weather是天气实体类,mList保存页面传递过来的天气数据
public WeatherAdapter(Context mContext, List<Weather> mList) {
this.mContext = mContext;
this.mList = mList;
}
@NonNull
@Override
public WeatherHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
WeatherHolder holder=new WeatherHolder(LayoutInflater.from(mContext).inflate(R.layout.item_layout,parent,false));
return holder;
}
@Override
public void onBindViewHolder(@NonNull WeatherHolder holder, int position) {
//复用holder时,加载新天气信息
holder.tvWeather.setText(mList.get(position).getWeather());
holder.tvHigh.setText(mList.get(position).getHigh());
holder.tvLow.setText(mList.get(position).getLow());
//当单击某个item时,跳转到页面WeatherInfoActivity,并向其传递item中的天气数据
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String weatherInfo=mList.get(holder.getAdapterPosition()).getWeather();
String high=mList.get(holder.getAdapterPosition()).getHigh();
String low=mList.get(holder.getAdapterPosition()).getLow();
Intent intent=new Intent(mContext,WeatherInfoActivity.class);
intent.putExtra("weather",weatherInfo);
intent.putExtra("high",high);
intent.putExtra("low",low);
mContext.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return mList.size();
}
public class WeatherHolder extends RecyclerView.ViewHolder {
private TextView tvWeather;
private TextView tvHigh;
private TextView tvLow;
public WeatherHolder(@NonNull View itemView) {
super(itemView);
//实例化item中的控件tv_weather,tv_high,tv_low
tvWeather=itemView.findViewById(R.id.tv_weather);
tvHigh=itemView.findViewById(R.id.tv_high);
tvLow=itemView.findViewById(R.id.tv_low);
}
}
}