package com.forcelain.awesomelayoutmanager.sample;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
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 com.forcelain.awesomelayoutmanager.AwesomeViewHolder;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class ArticleAdapter extends RecyclerView.Adapter<ArticleAdapter.ArticleViewHolder> {
private static final String TAG = "ArticleAdapter";
private static final String SCHEME_ASSETS = "assets://";
private List<Article> articles;
private OnItemClickListener itemClickListener;
private View.OnLayoutChangeListener onLayoutChangeListener;
public OnItemClickListener getItemClickListener() {
return itemClickListener;
}
public void setItemClickListener(OnItemClickListener itemClickListener) {
this.itemClickListener = itemClickListener;
}
@Override
public ArticleAdapter.ArticleViewHolder onCreateViewHolder(ViewGroup parent, int position) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.article_item, parent, false);
return new ArticleViewHolder(view);
}
@Override
public void onBindViewHolder(final ArticleAdapter.ArticleViewHolder articleViewHolder, final int position) {
final Article article = articles.get(position);
articleViewHolder.textContent.setText(article.text);
articleViewHolder.textTitle.setText(article.title + " " + position);
if (article.image.startsWith(SCHEME_ASSETS)) {
String fileName = article.image.replace(SCHEME_ASSETS, "");
AssetManager assetManager = articleViewHolder.itemView.getContext().getAssets();
InputStream is = null;
try {
is = assetManager.open(fileName);
Bitmap bitmap = BitmapFactory.decodeStream(is);
articleViewHolder.imageView.setImageBitmap(bitmap);
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
} finally {
closeQuietly(is);
}
}
View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (itemClickListener != null) {
itemClickListener.onItemClicked(articleViewHolder.getAdapterPosition());
}
}
};
articleViewHolder.readMoreAction.setOnClickListener(clickListener);
articleViewHolder.itemView.setOnClickListener(clickListener);
}
@Override
public void onViewAttachedToWindow(final ArticleAdapter.ArticleViewHolder holder) {
super.onViewAttachedToWindow(holder);
onLayoutChangeListener = new View.OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
View readMore = holder.readMore;
int readMoreHeight = readMore.getHeight();
readMore.setBottom(bottom - top - holder.itemView.getPaddingBottom());
readMore.setTop(readMore.getBottom() - readMoreHeight);
}
};
holder.itemView.addOnLayoutChangeListener(onLayoutChangeListener);
}
@Override
public void onViewDetachedFromWindow(ArticleAdapter.ArticleViewHolder holder) {
super.onViewDetachedFromWindow(holder);
holder.itemView.removeOnLayoutChangeListener(onLayoutChangeListener);
}
private void closeQuietly(InputStream is) {
if (is != null) {
try {
is.close();
} catch (IOException e) {
//ignore
}
}
}
@Override
public int getItemCount() {
return articles == null ? 0 : articles.size();
}
public void setArticles(List<Article> articles) {
this.articles = articles;
notifyDataSetChanged();
}
public static class ArticleViewHolder extends RecyclerView.ViewHolder implements AwesomeViewHolder {
ImageView imageView;
TextView textContent;
TextView textTitle;
View readMore;
View readMoreAction;
ArticleViewHolder(View itemView) {
super(itemView);
imageView = (ImageView) itemView.findViewById(R.id.article_image);
textContent = (TextView) itemView.findViewById(R.id.article_text);
textTitle = (TextView) itemView.findViewById(R.id.article_title);
readMore = itemView.findViewById(R.id.read_more);
readMoreAction = itemView.findViewById(R.id.read_more_action);
}
@Override
public void onStateChanged(float progress) {
readMore.setAlpha(1 - progress);
}
}
public interface OnItemClickListener {
void onItemClicked(int pos);
}
}