135 lines
4.1 KiB
Java
135 lines
4.1 KiB
Java
package at.fhj.swd.dailyhelper.adapter;
|
|
|
|
import android.content.Context;
|
|
import android.graphics.Bitmap;
|
|
import android.graphics.BitmapFactory;
|
|
import android.net.Uri;
|
|
import android.os.AsyncTask;
|
|
import android.support.annotation.NonNull;
|
|
import android.support.v7.widget.CardView;
|
|
import android.support.v7.widget.RecyclerView;
|
|
import android.util.Log;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.ImageView;
|
|
import android.widget.TextView;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URI;
|
|
import java.net.URL;
|
|
import java.util.List;
|
|
|
|
import at.fhj.swd.dailyhelper.R;
|
|
import at.fhj.swd.dailyhelper.model.Weather;
|
|
|
|
public class WeatherListAdapter extends RecyclerView.Adapter<WeatherListAdapter.WeatherItemViewHolder> {
|
|
private ImageView imageView;
|
|
|
|
|
|
private List<Weather> weathers;
|
|
|
|
private ItemClickListener itemClickListener;
|
|
|
|
public WeatherListAdapter(List<Weather> weathers, ItemClickListener itemClickListener) {
|
|
this.weathers = weathers;
|
|
this.itemClickListener = itemClickListener;
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public WeatherItemViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
|
|
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.weather_list_item, viewGroup, false);
|
|
return new WeatherItemViewHolder(view);
|
|
}
|
|
|
|
@Override
|
|
public void onBindViewHolder(@NonNull WeatherItemViewHolder weatherItemViewHolder, int i) {
|
|
|
|
Context context = weatherItemViewHolder.tvDate.getContext();
|
|
|
|
weatherItemViewHolder.cvWeatherItem.setOnClickListener(v -> {
|
|
Weather weather = weathers.get(weatherItemViewHolder.getAdapterPosition());
|
|
itemClickListener.onItemClicked(weather, weatherItemViewHolder.getAdapterPosition());
|
|
});
|
|
|
|
weatherItemViewHolder.tvDate.setText(weathers.get(i).getDate());
|
|
|
|
String icon = weathers.get(i).getIcon();
|
|
new DownloadImageTask(imageView).execute("https://openweathermap.org/img/w/" + icon + ".png");
|
|
|
|
|
|
weatherItemViewHolder.tvDescription.setText(weathers.get(i).getDescription());
|
|
weatherItemViewHolder.tvTemperature.setText(context.getString(R.string.temperature) + ": " + weathers.get(i).getTemp() + "°C");
|
|
weatherItemViewHolder.tvHumity.setText(context.getString(R.string.humidity) + ": " + weathers.get(i).getHumidity()+"%");
|
|
|
|
}
|
|
|
|
@Override
|
|
public int getItemCount() {
|
|
return weathers.size();
|
|
}
|
|
|
|
|
|
|
|
class WeatherItemViewHolder extends RecyclerView.ViewHolder {
|
|
|
|
CardView cvWeatherItem;
|
|
|
|
TextView tvDate;
|
|
|
|
TextView tvDescription;
|
|
TextView tvTemperature;
|
|
TextView tvHumity;
|
|
|
|
public WeatherItemViewHolder(@NonNull View itemView) {
|
|
super(itemView);
|
|
|
|
cvWeatherItem = itemView.findViewById(R.id.cvWeatherItem);
|
|
|
|
tvDate = itemView.findViewById(R.id.tvDate);
|
|
imageView = itemView.findViewById(R.id.card_view_image);
|
|
|
|
|
|
|
|
tvDescription = itemView.findViewById(R.id.tvDescription);
|
|
tvTemperature = itemView.findViewById(R.id.tvTemperature);
|
|
tvHumity = itemView.findViewById(R.id.tvHumity);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public interface ItemClickListener {
|
|
void onItemClicked(Weather weather, int position);
|
|
}
|
|
|
|
|
|
private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
|
|
ImageView bmImage;
|
|
public DownloadImageTask(ImageView bmImage) {
|
|
this.bmImage = bmImage;
|
|
}
|
|
|
|
protected Bitmap doInBackground(String... urls) {
|
|
String urldisplay = urls[0];
|
|
Bitmap bmp = null;
|
|
try {
|
|
InputStream in = new java.net.URL(urldisplay).openStream();
|
|
bmp = BitmapFactory.decodeStream(in);
|
|
} catch (Exception e) {
|
|
Log.e("Error", e.getMessage());
|
|
e.printStackTrace();
|
|
}
|
|
return bmp;
|
|
}
|
|
protected void onPostExecute(Bitmap result) {
|
|
bmImage.setImageBitmap(result);
|
|
}
|
|
}
|
|
|
|
|
|
}
|