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; ...@@ -25,64 +25,30 @@ import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable; import app.insti.interfaces.Writable;
import ru.noties.markwon.Markwon; import ru.noties.markwon.Markwon;
public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Readable<NewsArticle>,Writable<NewsArticle> { public class NewsAdapter extends RecyclerViewAdapter<NewsArticle> {
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;
private List<NewsArticle> newsArticles; public NewsAdapter(List<NewsArticle> posts, ItemClickListener itemClickListener) {
private ItemClickListener itemClickListener; super(posts, itemClickListener);
public NewsAdapter(List<NewsArticle> newsArticles, ItemClickListener itemClickListener) {
this.newsArticles = newsArticles;
this.itemClickListener = itemClickListener;
this.setHasStableIds(true);
}
@Override
public List<NewsArticle> getPosts() {
return newsArticles;
}
@Override
public void setPosts(List<NewsArticle> posts) {
this.newsArticles = posts;
} }
@NonNull
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { protected RecyclerView.ViewHolder getViewHolder(@NonNull ViewGroup parent, Context context) {
final Context context = parent.getContext();
if (viewType == VIEW_ITEM) {
LayoutInflater inflater = LayoutInflater.from(context); LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.news_article_card, parent, false); View postView = inflater.inflate(R.layout.news_article_card, parent, false);
final NewsAdapter.ViewHolder postViewHolder = new NewsAdapter.ViewHolder(postView); final NewsAdapter.ViewHolder postViewHolder = new NewsAdapter.ViewHolder(postView);
postView.setOnClickListener(new View.OnClickListener() { View.OnClickListener clickListener = v -> itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
@Override postView.setOnClickListener(clickListener);
public void onClick(View v) { postViewHolder.articleContent.setOnClickListener(clickListener);
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
postViewHolder.articleContent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
return postViewHolder; return postViewHolder;
} else {
LayoutInflater inflater = LayoutInflater.from(context);
View loadView = inflater.inflate(R.layout.blog_load_item, parent, false);
return new NewsAdapter.ProgressViewHolder(loadView);
}
} }
@Override @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder recyclerHolder, int position) { public void onBindViewHolder(@NonNull RecyclerView.ViewHolder recyclerHolder, int position) {
if (recyclerHolder instanceof ViewHolder) { if (recyclerHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) recyclerHolder; ViewHolder holder = (ViewHolder) recyclerHolder;
NewsArticle article = newsArticles.get(position); NewsArticle article = getPosts().get(position);
Markwon.setMarkdown(holder.articleTitle, article.getTitle()); Markwon.setMarkdown(holder.articleTitle, article.getTitle());
holder.articleBody.setText(article.getBody().getBodyName()); holder.articleBody.setText(article.getBody().getBodyName());
...@@ -103,30 +69,12 @@ public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> i ...@@ -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 static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar; public ProgressBar progressBar;
public ProgressViewHolder(View v) { public ProgressViewHolder(View v) {
super(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 ...@@ -139,10 +87,10 @@ public class NewsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> i
public ViewHolder(View itemView) { public ViewHolder(View itemView) {
super(itemView); super(itemView);
articleTitle = (TextView) itemView.findViewById(R.id.article_title); articleTitle = itemView.findViewById(R.id.article_title);
articleBody = (TextView) itemView.findViewById(R.id.article_body); articleBody = itemView.findViewById(R.id.article_body);
articlePublished = (TextView) itemView.findViewById(R.id.article_published); articlePublished = itemView.findViewById(R.id.article_published);
articleContent = (TextView) itemView.findViewById(R.id.article_content); articleContent = itemView.findViewById(R.id.article_content);
} }
} }
} }
...@@ -7,6 +7,7 @@ import android.view.ViewGroup; ...@@ -7,6 +7,7 @@ import android.view.ViewGroup;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import java.text.DateFormat; import java.text.DateFormat;
...@@ -24,63 +25,27 @@ import app.insti.interfaces.Readable; ...@@ -24,63 +25,27 @@ import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable; import app.insti.interfaces.Writable;
import ru.noties.markwon.Markwon; import ru.noties.markwon.Markwon;
public class PlacementBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Readable<PlacementBlogPost>,Writable<PlacementBlogPost> { public class PlacementBlogAdapter extends RecyclerViewAdapter<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 List<PlacementBlogPost> getPosts() {
return posts;
}
public void setPosts(List<PlacementBlogPost> posts) { public PlacementBlogAdapter(List<PlacementBlogPost> posts, ItemClickListener itemClickListener) {
this.posts = posts; super(posts, itemClickListener);
} }
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { protected RecyclerView.ViewHolder getViewHolder(@NonNull ViewGroup parent, Context context) {
final Context context = parent.getContext();
if (viewType == VIEW_ITEM) {
LayoutInflater inflater = LayoutInflater.from(context); LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.blog_post_card, parent, false); View postView = inflater.inflate(R.layout.blog_post_card, parent, false);
final PlacementBlogAdapter.ViewHolder postViewHolder = new PlacementBlogAdapter.ViewHolder(postView); final PlacementBlogAdapter.ViewHolder postViewHolder = new PlacementBlogAdapter.ViewHolder(postView);
postView.setOnClickListener(new View.OnClickListener() { postView.setOnClickListener(v -> itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition()));
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
return postViewHolder; return postViewHolder;
} else {
LayoutInflater inflater = LayoutInflater.from(context);
View loadView = inflater.inflate(R.layout.blog_load_item, parent, false);
return new PlacementBlogAdapter.ProgressViewHolder(loadView);
}
} }
@Override
public int getItemViewType(int position) {
return posts.size() > position ? VIEW_ITEM : VIEW_PROG;
}
@Override
public int getItemCount() {
return PlacementBlogFragment.showLoader ? (posts.size() + 1) : posts.size();
}
@Override @Override
public void onBindViewHolder(RecyclerView.ViewHolder recyclerHolder, int position) { public void onBindViewHolder(RecyclerView.ViewHolder recyclerHolder, int position) {
if (recyclerHolder instanceof ViewHolder) { if (recyclerHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) recyclerHolder; ViewHolder holder = (ViewHolder) recyclerHolder;
PlacementBlogPost post = posts.get(position); PlacementBlogPost post = getPosts().get(position);
Markwon.setMarkdown(holder.postTitle, post.getTitle()); Markwon.setMarkdown(holder.postTitle, post.getTitle());
Date publishedDate = post.getPublished(); Date publishedDate = post.getPublished();
...@@ -100,20 +65,12 @@ public class PlacementBlogAdapter extends RecyclerView.Adapter<RecyclerView.View ...@@ -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 static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar; public ProgressBar progressBar;
public ProgressViewHolder(View v) { public ProgressViewHolder(View v) {
super(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 ...@@ -125,9 +82,9 @@ public class PlacementBlogAdapter extends RecyclerView.Adapter<RecyclerView.View
public ViewHolder(View itemView) { public ViewHolder(View itemView) {
super(itemView); super(itemView);
postTitle = (TextView) itemView.findViewById(R.id.post_title); postTitle = itemView.findViewById(R.id.post_title);
postPublished = (TextView) itemView.findViewById(R.id.post_published); postPublished = itemView.findViewById(R.id.post_published);
postContent = (TextView) itemView.findViewById(R.id.post_content); 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; ...@@ -7,6 +7,7 @@ import android.view.ViewGroup;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import java.text.DateFormat; import java.text.DateFormat;
...@@ -24,54 +25,27 @@ import app.insti.interfaces.Readable; ...@@ -24,54 +25,27 @@ import app.insti.interfaces.Readable;
import app.insti.interfaces.Writable; import app.insti.interfaces.Writable;
import ru.noties.markwon.Markwon; import ru.noties.markwon.Markwon;
public class TrainingBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements Readable<TrainingBlogPost>,Writable<TrainingBlogPost> { public class TrainingBlogAdapter extends RecyclerViewAdapter<TrainingBlogPost> {
private final int VIEW_ITEM = 1;
private final int VIEW_PROG = 0;
private List<TrainingBlogPost> posts;
private ItemClickListener itemClickListener;
public TrainingBlogAdapter(List<TrainingBlogPost> posts, ItemClickListener itemClickListener) { public TrainingBlogAdapter(List<TrainingBlogPost> posts, ItemClickListener itemClickListener) {
this.posts = posts; super(posts, itemClickListener);
this.itemClickListener = itemClickListener;
this.setHasStableIds(true);
}
public List<TrainingBlogPost> getPosts() {
return posts;
}
public void setPosts(List<TrainingBlogPost> posts) {
this.posts = posts;
} }
@Override @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { protected RecyclerView.ViewHolder getViewHolder(@NonNull ViewGroup parent, Context context) {
final Context context = parent.getContext();
if (viewType == VIEW_ITEM) {
LayoutInflater inflater = LayoutInflater.from(context); LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(R.layout.blog_post_card, parent, false); View postView = inflater.inflate(R.layout.blog_post_card, parent, false);
final TrainingBlogAdapter.ViewHolder postViewHolder = new TrainingBlogAdapter.ViewHolder(postView); final TrainingBlogAdapter.ViewHolder postViewHolder = new TrainingBlogAdapter.ViewHolder(postView);
postView.setOnClickListener(new View.OnClickListener() { postView.setOnClickListener(v -> itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition()));
@Override
public void onClick(View v) {
itemClickListener.onItemClick(v, postViewHolder.getAdapterPosition());
}
});
return postViewHolder; return postViewHolder;
} else {
LayoutInflater inflater = LayoutInflater.from(context);
View loadView = inflater.inflate(R.layout.blog_load_item, parent, false);
return new TrainingBlogAdapter.ProgressViewHolder(loadView);
}
} }
@Override @Override
public void onBindViewHolder(RecyclerView.ViewHolder recyclerHolder, int position) { public void onBindViewHolder(RecyclerView.ViewHolder recyclerHolder, int position) {
if (recyclerHolder instanceof ViewHolder) { if (recyclerHolder instanceof ViewHolder) {
ViewHolder holder = (ViewHolder) recyclerHolder; ViewHolder holder = (ViewHolder) recyclerHolder;
TrainingBlogPost post = posts.get(position); TrainingBlogPost post = getPosts().get(position);
Markwon.setMarkdown(holder.postTitle, post.getTitle()); Markwon.setMarkdown(holder.postTitle, post.getTitle());
Date publishedDate = post.getPublished(); Date publishedDate = post.getPublished();
...@@ -91,30 +65,13 @@ public class TrainingBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewH ...@@ -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 static class ProgressViewHolder extends RecyclerView.ViewHolder {
public ProgressBar progressBar; public ProgressBar progressBar;
public ProgressViewHolder(View v) { public ProgressViewHolder(View v) {
super(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 ...@@ -126,9 +83,9 @@ public class TrainingBlogAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
public ViewHolder(View itemView) { public ViewHolder(View itemView) {
super(itemView); super(itemView);
postTitle = (TextView) itemView.findViewById(R.id.post_title); postTitle = itemView.findViewById(R.id.post_title);
postPublished = (TextView) itemView.findViewById(R.id.post_published); postPublished = itemView.findViewById(R.id.post_published);
postContent = (TextView) itemView.findViewById(R.id.post_content); 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