Created
October 7, 2013 03:53
-
-
Save jpotts18/6862316 to your computer and use it in GitHub Desktop.
Timeline with View holder
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class TimeLineAdapter extends ArrayAdapter { | |
private final DailyInput dailyInput; | |
private LayoutInflater mInflater; | |
List<TimelineObject> timelineList = new ArrayList<TimelineObject>(); | |
private Context mContext; | |
private final int TYPE_MESSAGE = 1; | |
private final int TYPE_ACTIVITY = 2; | |
private final int TYPE_MEAL = 3; | |
private final int TYPE_DAILY_INPUT = 4; | |
private final int TYPE_DRINK = 5; | |
public static class MealViewHolder{ | |
TextView mealTime; | |
ImageView mealImage; | |
TextView mealPortion; | |
TextView mealDescription; | |
TextView mealPremeal; | |
TextView mealPremealKey; | |
TextView mealPostMeal; | |
TextView mealPostMealKey; | |
TextView mealMood; | |
TextView mealMoodKey; | |
} | |
@SuppressWarnings("unchecked") | |
public TimeLineAdapter(Context mContext, int textViewResourceId, List<TimelineObject> timelineList, DailyInput dailyInput) { | |
super(mContext,textViewResourceId,timelineList); | |
this.timelineList = timelineList; | |
this.dailyInput = dailyInput; | |
this.mContext = mContext; | |
this.mInflater = (LayoutInflater) mContext.getSystemService(mContext.LAYOUT_INFLATER_SERVICE); | |
} | |
@Override | |
public int getItemViewType(int position) { | |
int typeId = 0; | |
if(timelineList.get(position) instanceof Message){ | |
typeId = TYPE_MESSAGE; | |
} | |
if(timelineList.get(position) instanceof PhysicalActivity){ | |
typeId = TYPE_ACTIVITY; | |
} | |
if(timelineList.get(position) instanceof GetOnlyMeal){ | |
typeId = TYPE_MEAL; | |
} | |
if(timelineList.get(position) instanceof Hydration){ | |
typeId = TYPE_DRINK; | |
} | |
return typeId; | |
} | |
@SuppressLint("ResourceAsColor") | |
public View getView(int position, View convertView, ViewGroup parent) { | |
View returnView = null; | |
if(position == 0){ | |
if(dailyInput == null){ | |
RelativeLayout row = (RelativeLayout) View.inflate(mContext, R.layout.partial_timeline_daily_inputs_missing, null); | |
return row; | |
} else { | |
LinearLayout row = createParameters(); | |
return row; | |
} | |
} | |
switch (getItemViewType(position)){ | |
case TYPE_MEAL: | |
MealViewHolder mealViewHolder; | |
GetOnlyMeal m = (GetOnlyMeal) timelineList.get(position); | |
if(convertView == null){ | |
convertView = mInflater.inflate(R.layout.partial_timeline_meal, null); | |
mealViewHolder = new MealViewHolder(); | |
mealViewHolder.mealTime = (TextView) convertView.findViewById(R.id.timeline_meal_time); | |
mealViewHolder.mealImage = (ImageView) convertView.findViewById(R.id.timeline_meal_image); | |
mealViewHolder.mealPortion = (TextView) convertView.findViewById(R.id.timeline_meal_portion); | |
mealViewHolder.mealDescription = (TextView) convertView.findViewById(R.id.timeline_meal_description); | |
mealViewHolder.mealPremeal = (TextView) convertView.findViewById(R.id.timeline_meal_premeal); | |
mealViewHolder.mealMood = (TextView) convertView.findViewById(R.id.timeline_meal_mood); | |
mealViewHolder.mealPostMeal = (TextView) convertView.findViewById(R.id.timeline_meal_postmeal); | |
mealViewHolder.mealPremealKey = (TextView) convertView.findViewById(R.id.timeline_meal_postmeal_key); | |
mealViewHolder.mealMoodKey = (TextView) convertView.findViewById(R.id.timeline_meal_postmeal_key); | |
mealViewHolder.mealPostMealKey = (TextView) convertView.findViewById(R.id.timeline_meal_postmeal_key); | |
convertView.setTag(mealViewHolder); | |
} else { | |
mealViewHolder = (MealViewHolder) convertView.getTag(); | |
} | |
ImageLoader.getInstance().displayImage( | |
m.getPhoto().getUrl(), | |
mealViewHolder.mealImage, | |
new DisplayImageOptions.Builder() | |
.showImageForEmptyUri(R.drawable.no_photo) | |
.showImageOnFail(R.drawable.no_photo) | |
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) | |
.cacheOnDisc(true) | |
.build(), | |
new SimpleImageLoadingListener(){ | |
@Override | |
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { | |
super.onLoadingComplete(imageUri, view, loadedImage); | |
// view.startAnimation(AnimationUtils.loadAnimation(TimelineActivity.this, R.anim.fade_in)); | |
} | |
} | |
); | |
mealViewHolder.mealTime.setText(m.getHumanTime()); | |
mealViewHolder.mealPortion.setText(Integer.toString(m.getPortionConsumed()) + "/4"); | |
mealViewHolder. mealDescription.setText(m.getDescription()); | |
// Hide or show optional data | |
if(m.getPostMealFullness() != null){ | |
mealViewHolder.mealPostMeal.setText(m.getPreMealHunger().getDescription()); | |
} else { | |
convertView.findViewById(R.id.timeline_meal_postmeal_key).setVisibility(View.GONE); | |
mealViewHolder.mealPostMeal.setVisibility(View.GONE); | |
} | |
if(m.getPreMealHunger() != null){ | |
mealViewHolder.mealPremeal.setText(m.getPostMealFullness().getDescription()); | |
} else { | |
mealViewHolder.mealPremealKey.setVisibility(View.GONE); | |
mealViewHolder.mealPremeal.setVisibility(View.GONE); | |
} | |
if(m.getMood() != null){ | |
mealViewHolder.mealMood.setText(m.getMood().getDescription()); | |
} else { | |
mealViewHolder.mealMoodKey.setVisibility(View.GONE); | |
mealViewHolder.mealMood.setVisibility(View.GONE); | |
} | |
returnView = convertView; | |
break; | |
case TYPE_ACTIVITY: | |
break; | |
case TYPE_DAILY_INPUT: | |
break; | |
case TYPE_DRINK: | |
break; | |
case TYPE_MESSAGE: | |
break; | |
default: | |
break; | |
} | |
return returnView; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment