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 { private ImageView imageView; private List weathers; private ItemClickListener itemClickListener; public WeatherListAdapter(List 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 { 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); } } }