From ce246448cf4e826122cfa578bdc91df20b971d63 Mon Sep 17 00:00:00 2001 From: Sugooi Date: Sun, 9 Jul 2017 19:10:43 +0530 Subject: [PATCH 1/2] Updated ForecastAdapter using SOLID principles. Removed the switches as it was violating the open-close principle. --- .../android/sunshine/app/ForecastAdapter.java | 101 +++++++++++++----- 1 file changed, 74 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java b/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java index 235cb6183..2a686e2bc 100644 --- a/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java +++ b/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java @@ -8,20 +8,78 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; +import java.util.*; /** * {@link ForecastAdapter} exposes a list of weather forecasts * from a {@link Cursor} to a {@link android.widget.ListView}. */ -public class ForecastAdapter extends CursorAdapter { + + + +public class ForecastAdapter extends CursorAdapter { + private static final int VIEW_TYPE_COUNT = 2; private static final int VIEW_TYPE_TODAY = 0; private static final int VIEW_TYPE_FUTURE_DAY = 1; + Map map = new HashMap(); + + map.put(VIEW_TYPE_TODAY,Nview.VIEW_TYPE_TODAY); + map.put(VIEW_TYPE_FUTURE_DAY,Nview.VIEW_TYPE_FUTURE_DAY); + + + // Map processors = new HashMap<>(); + // processors.add(VIEW_TYPE_TODAY, new NviewToday()); + // processors.add(VIEW_TYPE_FUTURE_DAY, new NviewFuture()); + + // Flag to determine if we want to use a separate view for "today". private boolean mUseTodayLayout = true; + + public enum Nview extends ViewChange{ + + VIEW_TYPE_TODAY { + @Override + public int getLayoutId() + {return R.layout.list_item_forecast_today;} + + }, + + VIEW_TYPE_FUTURE_DAY { + @Override + public int getLayoutId() + {return R.layout.list_item_forecast;} + }; + + public abstract int getLayoutId(); + } + + + public enum Bview { + + VIEW_TYPE_TODAY { + @Override + public void setLayoutView() + {viewHolder.iconView.setImageResource(Utility.getArtResourceForWeatherCondition( + cursor.getInt(ForecastFragment.COL_WEATHER_CONDITION_ID)));} + + }, + + VIEW_TYPE_FUTURE_DAY { + @Override + public void setLayoutView() + { viewHolder.iconView.setImageResource(Utility.getIconResourceForWeatherCondition( + cursor.getInt(ForecastFragment.COL_WEATHER_CONDITION_ID)));} + }; + + public abstract void setLayoutView(); + } + + + /** * Cache of the children views for a forecast list item. */ @@ -32,6 +90,7 @@ public static class ViewHolder { public final TextView highTempView; public final TextView lowTempView; + public ViewHolder(View view) { iconView = (ImageView) view.findViewById(R.id.list_item_icon); dateView = (TextView) view.findViewById(R.id.list_item_date_textview); @@ -45,21 +104,18 @@ public ForecastAdapter(Context context, Cursor c, int flags) { super(context, c, flags); } + + @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { // Choose the layout type + int viewType = getItemViewType(cursor.getPosition()); - int layoutId = -1; - switch (viewType) { - case VIEW_TYPE_TODAY: { - layoutId = R.layout.list_item_forecast_today; - break; - } - case VIEW_TYPE_FUTURE_DAY: { - layoutId = R.layout.list_item_forecast; - break; - } - } + + + Nview nview=map.get(viewType); + + int layoutId = nview.getLayoutId(); View view = LayoutInflater.from(context).inflate(layoutId, parent, false); @@ -75,20 +131,11 @@ public void bindView(View view, Context context, Cursor cursor) { ViewHolder viewHolder = (ViewHolder) view.getTag(); int viewType = getItemViewType(cursor.getPosition()); - switch (viewType) { - case VIEW_TYPE_TODAY: { - // Get weather icon - viewHolder.iconView.setImageResource(Utility.getArtResourceForWeatherCondition( - cursor.getInt(ForecastFragment.COL_WEATHER_CONDITION_ID))); - break; - } - case VIEW_TYPE_FUTURE_DAY: { - // Get weather icon - viewHolder.iconView.setImageResource(Utility.getIconResourceForWeatherCondition( - cursor.getInt(ForecastFragment.COL_WEATHER_CONDITION_ID))); - break; - } - } + + Bview bview=map.get(viewType); + + bview.setLayoutView(); + // Read date from cursor long dateInMillis = cursor.getLong(ForecastFragment.COL_WEATHER_DATE); @@ -128,4 +175,4 @@ public int getItemViewType(int position) { public int getViewTypeCount() { return VIEW_TYPE_COUNT; } -} \ No newline at end of file +} From 534203b3f8a1b177b75439dc55497da22d107031 Mon Sep 17 00:00:00 2001 From: Sugooi Date: Sun, 9 Jul 2017 19:25:46 +0530 Subject: [PATCH 2/2] Update ForecastAdapter.java --- .../android/sunshine/app/ForecastAdapter.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java b/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java index 2a686e2bc..cb0907076 100644 --- a/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java +++ b/app/src/main/java/com/example/android/sunshine/app/ForecastAdapter.java @@ -25,56 +25,41 @@ public class ForecastAdapter extends CursorAdapter { private static final int VIEW_TYPE_FUTURE_DAY = 1; Map map = new HashMap(); - map.put(VIEW_TYPE_TODAY,Nview.VIEW_TYPE_TODAY); map.put(VIEW_TYPE_FUTURE_DAY,Nview.VIEW_TYPE_FUTURE_DAY); - - // Map processors = new HashMap<>(); - // processors.add(VIEW_TYPE_TODAY, new NviewToday()); - // processors.add(VIEW_TYPE_FUTURE_DAY, new NviewFuture()); - - // Flag to determine if we want to use a separate view for "today". private boolean mUseTodayLayout = true; public enum Nview extends ViewChange{ - VIEW_TYPE_TODAY { @Override public int getLayoutId() {return R.layout.list_item_forecast_today;} }, - VIEW_TYPE_FUTURE_DAY { @Override public int getLayoutId() {return R.layout.list_item_forecast;} }; - public abstract int getLayoutId(); } - public enum Bview { - VIEW_TYPE_TODAY { @Override public void setLayoutView() {viewHolder.iconView.setImageResource(Utility.getArtResourceForWeatherCondition( cursor.getInt(ForecastFragment.COL_WEATHER_CONDITION_ID)));} - }, - VIEW_TYPE_FUTURE_DAY { @Override public void setLayoutView() { viewHolder.iconView.setImageResource(Utility.getIconResourceForWeatherCondition( cursor.getInt(ForecastFragment.COL_WEATHER_CONDITION_ID)));} }; - public abstract void setLayoutView(); } @@ -112,7 +97,6 @@ public View newView(Context context, Cursor cursor, ViewGroup parent) { int viewType = getItemViewType(cursor.getPosition()); - Nview nview=map.get(viewType); int layoutId = nview.getLayoutId();