Commit bc0d9f75 authored by Varun Patil's avatar Varun Patil Committed by GitHub

Merge pull request #292 from unstablebrainiac/master

Generify RecyclerView Adapters
parents 5a6cd66d 9c4494f2
......@@ -25,64 +25,30 @@ import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable;
import ru.noties.markwon.Markwon;
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Readable<NewsArticle>,Writable<NewsArticle> {
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;
public class NewsAdapter extends RecyclerViewAdapter<NewsArticle> {
private List<NewsArticle> newsArticles;
private ItemClickListener itemClickListener;
public NewsAdapter(List<NewsArticle> newsArticles, ItemClickListener itemClickListener) {
this.newsArticles = newsArticles;
this.itemClickListener = itemClickListener;
this.setHasStableIds(true);
public NewsAdapter(List<NewsArticle> posts, ItemClickListener itemClickListener) {
super(posts, itemClickListener);
}
@Override
public List<NewsArticle> getPosts() {
return newsArticles;
}
protected RecyclerView.ViewHolder getViewHolder(@NonNull ViewGroup parent, Context context) {
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.news_article_card, parent, false);
@Override
public void setPosts(List<NewsArticle> posts) {
this.newsArticles = posts;
}
final NewsAdapter.ViewHolder postViewHolder = new NewsAdapter.ViewHolder(postView);
View.OnClickListener clickListener = v -> itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
postView.setOnClickListener(clickListener);
postViewHolder.articleContent.setOnClickListener(clickListener);
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
final Context context = parent.getContext();
if (viewType == VIEW_ITEM) {
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.news_article_card, parent, false);
final NewsAdapter.ViewHolder postViewHolder = new NewsAdapter.ViewHolder(postView);
postView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
postViewHolder.articleContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
return postViewHolder;
} else {
LayoutInflater inflater = LayoutInflater.from(context);
View loadView = inflater.inflate(R.layout.blog_load_item, parent, false);
return new NewsAdapter.ProgressViewHolder(loadView);
}
return postViewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder recyclerHolder, int position) {
if (recyclerHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) recyclerHolder;
NewsArticle article = newsArticles.get(position);
NewsArticle article = getPosts().get(position);
Markwon.setMarkdown(holder.articleTitle, article.getTitle());
holder.articleBody.setText(article.getBody().getBodyName());
......@@ -103,30 +69,12 @@ public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> i
}
}
@Override
public int getItemViewType(int position) {
return newsArticles.size() > position ? VIEW_ITEM : VIEW_PROG;
}
@Override
public long getItemId(int position) {
if (position < newsArticles.size()) {
return newsArticles.get(position).getArticleID().hashCode();
}
return -1;
}
@Override
public int getItemCount() {
return NewsFragment.showLoader ? (newsArticles.size() + 1) : newsArticles.size();
}
public static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar;
public ProgressViewHolder(View v) {
super(v);
progressBar = (ProgressBar) v.findViewById(R.id.blog_load_item);
progressBar = v.findViewById(R.id.blog_load_item);
}
}
......@@ -139,10 +87,10 @@ public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> i
public ViewHolder(View itemView) {
super(itemView);
articleTitle = (TextView) itemView.findViewById(R.id.article_title);
articleBody = (TextView) itemView.findViewById(R.id.article_body);
articlePublished = (TextView) itemView.findViewById(R.id.article_published);
articleContent = (TextView) itemView.findViewById(R.id.article_content);
articleTitle = itemView.findViewById(R.id.article_title);
articleBody = itemView.findViewById(R.id.article_body);
articlePublished = itemView.findViewById(R.id.article_published);
articleContent = itemView.findViewById(R.id.article_content);
}
}
}
......@@ -7,6 +7,7 @@ import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.text.DateFormat;
......@@ -24,63 +25,27 @@ import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable;
import ru.noties.markwon.Markwon;
public class PlacementBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Readable<PlacementBlogPost>,Writable<PlacementBlogPost> {
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;
private List<PlacementBlogPost> posts;
private ItemClickListener itemClickListener;
public PlacementBlogAdapter(List<PlacementBlogPost> posts, ItemClickListener itemClickListener) {
this.posts = posts;
this.itemClickListener = itemClickListener;
this.setHasStableIds(true);
}
public class PlacementBlogAdapter extends RecyclerViewAdapter<PlacementBlogPost> {
public List<PlacementBlogPost> getPosts() {
return posts;
}
public void setPosts(List<PlacementBlogPost> posts) {
this.posts = posts;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final Context context = parent.getContext();
if (viewType == VIEW_ITEM) {
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.blog_post_card, parent, false);
final PlacementBlogAdapter.ViewHolder postViewHolder = new PlacementBlogAdapter.ViewHolder(postView);
postView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
return postViewHolder;
} else {
LayoutInflater inflater = LayoutInflater.from(context);
View loadView = inflater.inflate(R.layout.blog_load_item, parent, false);
return new PlacementBlogAdapter.ProgressViewHolder(loadView);
}
public PlacementBlogAdapter(List<PlacementBlogPost> posts, ItemClickListener itemClickListener) {
super(posts, itemClickListener);
}
@Override
public int getItemViewType(int position) {
return posts.size() > position ? VIEW_ITEM : VIEW_PROG;
}
protected RecyclerView.ViewHolder getViewHolder(@NonNull ViewGroup parent, Context context) {
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.blog_post_card, parent, false);
@Override
public int getItemCount() {
return PlacementBlogFragment.showLoader ? (posts.size() + 1) : posts.size();
final PlacementBlogAdapter.ViewHolder postViewHolder = new PlacementBlogAdapter.ViewHolder(postView);
postView.setOnClickListener(v -> itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition()));
return postViewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder recyclerHolder, int position) {
if (recyclerHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) recyclerHolder;
PlacementBlogPost post = posts.get(position);
PlacementBlogPost post = getPosts().get(position);
Markwon.setMarkdown(holder.postTitle, post.getTitle());
Date publishedDate = post.getPublished();
......@@ -100,20 +65,12 @@ public class PlacementBlogAdapter extends RecyclerView.Adapter<RecyclerView.View
}
}
@Override
public long getItemId(int position) {
if (position < posts.size()) {
return posts.get(position).getPostID().hashCode();
}
return -1;
}
public static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar;
public ProgressViewHolder(View v) {
super(v);
progressBar = (ProgressBar) v.findViewById(R.id.blog_load_item);
progressBar = v.findViewById(R.id.blog_load_item);
}
}
......@@ -125,9 +82,9 @@ public class PlacementBlogAdapter extends RecyclerView.Adapter<RecyclerView.View
public ViewHolder(View itemView) {
super(itemView);
postTitle = (TextView) itemView.findViewById(R.id.post_title);
postPublished = (TextView) itemView.findViewById(R.id.post_published);
postContent = (TextView) itemView.findViewById(R.id.post_content);
postTitle = itemView.findViewById(R.id.post_title);
postPublished = itemView.findViewById(R.id.post_published);
postContent = itemView.findViewById(R.id.post_content);
}
}
......
package app.insti.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import app.insti.R;
import app.insti.fragment.RecyclerViewFragment;
import app.insti.interfaces.Clickable;
import app.insti.interfaces.ItemClickListener;
import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable;
public abstract class RecyclerViewAdapter<T extends Clickable> extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Readable<T>, Writable<T> {
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;
private List<T> posts;
protected ItemClickListener itemClickListener;
public RecyclerViewAdapter(List<T> posts, ItemClickListener itemClickListener) {
this.posts = posts;
this.itemClickListener = itemClickListener;
this.setHasStableIds(true);
}
@Override
public List<T> getPosts() {
return posts;
}
@Override
public void setPosts(List<T> posts) {
this.posts = posts;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
final Context context = parent.getContext();
if (viewType == VIEW_ITEM) {
return getViewHolder(parent, context);
} else {
LayoutInflater inflater = LayoutInflater.from(context);
View loadView = inflater.inflate(R.layout.blog_load_item, parent, false);
return new ProgressViewHolder(loadView);
}
}
protected abstract RecyclerView.ViewHolder getViewHolder(@NonNull ViewGroup parent, Context context);
@Override
public int getItemViewType(int position) {
return posts.size() > position ? VIEW_ITEM : VIEW_PROG;
}
@Override
public long getItemId(int position) {
if (position < posts.size()) {
return posts.get(position).getId().hashCode();
}
return -1;
}
@Override
public int getItemCount() {
return RecyclerViewFragment.showLoader ? (posts.size() + 1) : posts.size();
}
public static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar;
public ProgressViewHolder(View v) {
super(v);
progressBar = v.findViewById(R.id.blog_load_item);
}
}
}
......@@ -7,6 +7,7 @@ import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.text.DateFormat;
......@@ -24,54 +25,27 @@ import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable;
import ru.noties.markwon.Markwon;
public class TrainingBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Readable<TrainingBlogPost>,Writable<TrainingBlogPost> {
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;
private List<TrainingBlogPost> posts;
private ItemClickListener itemClickListener;
public class TrainingBlogAdapter extends RecyclerViewAdapter<TrainingBlogPost> {
public TrainingBlogAdapter(List<TrainingBlogPost> posts, ItemClickListener itemClickListener) {
this.posts = posts;
this.itemClickListener = itemClickListener;
this.setHasStableIds(true);
}
public List<TrainingBlogPost> getPosts() {
return posts;
}
public void setPosts(List<TrainingBlogPost> posts) {
this.posts = posts;
super(posts, itemClickListener);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final Context context = parent.getContext();
if (viewType == VIEW_ITEM) {
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.blog_post_card, parent, false);
final TrainingBlogAdapter.ViewHolder postViewHolder = new TrainingBlogAdapter.ViewHolder(postView);
postView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
return postViewHolder;
} else {
LayoutInflater inflater = LayoutInflater.from(context);
View loadView = inflater.inflate(R.layout.blog_load_item, parent, false);
return new TrainingBlogAdapter.ProgressViewHolder(loadView);
}
protected RecyclerView.ViewHolder getViewHolder(@NonNull ViewGroup parent, Context context) {
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.blog_post_card, parent, false);
final TrainingBlogAdapter.ViewHolder postViewHolder = new TrainingBlogAdapter.ViewHolder(postView);
postView.setOnClickListener(v -> itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition()));
return postViewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder recyclerHolder, int position) {
if (recyclerHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) recyclerHolder;
TrainingBlogPost post = posts.get(position);
TrainingBlogPost post = getPosts().get(position);
Markwon.setMarkdown(holder.postTitle, post.getTitle());
Date publishedDate = post.getPublished();
......@@ -91,30 +65,13 @@ public class TrainingBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
}
}
@Override
public int getItemViewType(int position) {
return posts.size() > position ? VIEW_ITEM : VIEW_PROG;
}
@Override
public long getItemId(int position) {
if (position < posts.size()) {
return posts.get(position).getPostID().hashCode();
}
return -1;
}
@Override
public int getItemCount() {
return TrainingBlogFragment.showLoader ? (posts.size() + 1) : posts.size();
}
public static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar;
public ProgressViewHolder(View v) {
super(v);
progressBar = (ProgressBar) v.findViewById(R.id.blog_load_item);
progressBar = v.findViewById(R.id.blog_load_item);
}
}
......@@ -126,9 +83,9 @@ public class TrainingBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
public ViewHolder(View itemView) {
super(itemView);
postTitle = (TextView) itemView.findViewById(R.id.post_title);
postPublished = (TextView) itemView.findViewById(R.id.post_published);
postContent = (TextView) itemView.findViewById(R.id.post_content);
postTitle = itemView.findViewById(R.id.post_title);
postPublished = itemView.findViewById(R.id.post_published);
postContent = itemView.findViewById(R.id.post_content);
}
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment