Recyclerview steembo

package com.steembo.news;

import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.Toast;

import com.github.clans.fab.FloatingActionButton;
import com.github.clans.fab.FloatingActionMenu;
import com.steembo.R;
import com.steembo.customadapter.NewsActivityAdapter;
import com.steembo.helper.Helper;
import com.steembo.model.NewsJsonData;
import com.steembo.quickaction.ActionItem;
import com.steembo.quickaction.QuickActionLayout;
import com.steembo.request_responce.JSONHandler;
import com.steembo.request_responce.ReqResService;
import com.steembo.utils.CircularProgressViewDialog;
import com.steembo.utils.Constants;
import com.steembo.utils.ItemClickSupport;

import java.util.ArrayList;
import java.util.HashMap;

import static android.widget.Toast.LENGTH_SHORT;

public class NewsActivity extends AppCompatActivity {

    private static final String TAG = "[NewsActivity] : ";

    private Context context = NewsActivity.this;

    private LayoutInflater inflater;

    private RecyclerView rv_news_list;

    private NewsActivityAdapter newsActivityAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    private LinearLayout old_toolbar = null, new_toolbar = null;
    private ActionItem editItem, deleteItem;

    QuickActionLayout quickActionLayout;

    private static int position;

    private FloatingActionMenu fab_news_menu;
    private FloatingActionButton fab_add_news;

    private ArrayList<NewsJsonData> newsJsonDataArrayList = new ArrayList<NewsJsonData>();

    private Intent intent;

    private static View view;
    private RelativeLayout relNoDataFound;
    private CircularProgressViewDialog circularProgressViewDialog;
    private int currentPage = 1;
    private boolean areMoreRecordsAvailable = false;

    private Handler mHandler = new Handler() {

        public void handleMessage(android.os.Message msg) {
            Log.i(TAG, "in mHandler class");
            switch (msg.what) {

                case Constants.ServiceCode.SERVICE_DELETE:
                    Helper.showToast("News deleted successfully", NewsActivity.this);
                    if (old_toolbar != null) {
                        old_toolbar.removeAllViews();
                        old_toolbar.setVisibility(View.GONE);
                        old_toolbar = null;
                    }
                    break;
                default:
                    break;
            }
        }
    };

    @Override    protected void onResume() {
        super.onResume();

        Log.i(TAG, "onResume() called... : ");

        try {
            Log.i(TAG, "onResume(), Constants.News.refreshNewsList : " + Constants.News.refreshNewsList);
            if (Constants.News.refreshNewsList) {

                if (old_toolbar != null) {
                    old_toolbar.removeAllViews();
                    old_toolbar.setVisibility(View.GONE);
                    old_toolbar = null;
                }

                currentPage = 1;
                NewsActivity.this.newsJsonDataArrayList.clear();
                getJsonDataFromServerGetNewsList(currentPage);

                Constants.News.refreshNewsList = false;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.news_activity);

        Log.i(TAG, "onCreate(), called : ");

        try {
            inflater = LayoutInflater.from(this);

            rv_news_list = (RecyclerView) findViewById(R.id.rv_news_list);

            relNoDataFound = (RelativeLayout) findViewById(R.id.relNoDataFound);

            mLayoutManager = new LinearLayoutManager(this);
            rv_news_list.setLayoutManager(mLayoutManager);
            rv_news_list.setItemAnimator(new DefaultItemAnimator());
            rv_news_list.addOnScrollListener(onScrollListener);

            fab_news_menu = (FloatingActionMenu) findViewById(R.id.fab_news_menu);
            fab_add_news = (FloatingActionButton) findViewById(R.id.fab_add_news);

            fab_add_news.setOnClickListener(onButtonClick());

            fab_news_menu.setOnClickListener(new View.OnClickListener() {
                @Override                public void onClick(View view) {
                    if (fab_news_menu.isOpened()) {
                        fab_news_menu.close(true);
                    }
                }
            });

            fab_news_menu.setClosedOnTouchOutside(true);

            rv_news_list.setOnTouchListener(new View.OnTouchListener() {
                @Override                public boolean onTouch(View v, MotionEvent event) {
                    if (fab_news_menu.isOpened())
                        fab_news_menu.close(true);
                    return false;
                }
            });

            ItemClickSupport.addTo(rv_news_list).setOnItemLongClickListener(new ItemClickSupport.OnItemLongClickListener() {
                @Override                public boolean onItemLongClicked(RecyclerView recyclerView, int position, View v) {
                    try {
                        Log.i(TAG, "onItemLongClicked(), position : " + position);
                        fab_news_menu.close(true);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return true; // true means the event consumed false means it forwards the event.                }
            });

            ItemClickSupport.addTo(rv_news_list).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() {
                @Override                public void onItemClicked(RecyclerView recyclerView, int position, View view) {
                    try {
                        Log.i(TAG, "onItemClicked(), position : " + position);

                        Log.i(TAG, "onItemClicked(), NewsActivity.position : " + NewsActivity.position);

                        NewsActivity.view = view;

                        fab_news_menu.close(true);

                        new_toolbar = (LinearLayout) view.findViewById(R.id.ll_toolbar);

                        Log.i(TAG, "onItemClicked(), new_toolbar : " + new_toolbar);

                        Log.i(TAG, "onItemClicked(), old_toolbar : " + old_toolbar);

                        if (old_toolbar != null && NewsActivity.position != position) {
                            old_toolbar.removeAllViews();
                            old_toolbar.setVisibility(View.GONE);
                            old_toolbar = null;
                        }

                        old_toolbar = new_toolbar;

                        NewsActivity.position = position;

                        scrollMyListViewToPosition(position);

                        if (new_toolbar.getVisibility() == View.GONE) {
                            quickActionLayout = new QuickActionLayout(view);
                            //quickActionLayout.addActionItem(editItem);                            quickActionLayout.addActionItem(deleteItem);

                            new_toolbar.addView(quickActionLayout.getQuickActionView());
                            new_toolbar.setVisibility(View.VISIBLE);
                        } else {
                            new_toolbar.removeAllViews();
                            new_toolbar.setVisibility(View.GONE);
                        }


                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            });

            prepareQuickActions();

            if (newsJsonDataArrayList.size() <= 0)
                relNoDataFound.setVisibility(relNoDataFound.VISIBLE);
            else                relNoDataFound.setVisibility(relNoDataFound.GONE);

            currentPage = 1;
            NewsActivity.this.newsJsonDataArrayList.clear();
            getJsonDataFromServerGetNewsList(currentPage);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private int oldDy = 0;
    private RecyclerView.OnScrollListener onScrollListener = new RecyclerView.OnScrollListener() {
        @Override        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            Log.i(TAG, "onScrollListener, onScrolled(int, int), dx : " + dx + ", dy : " + dy);
            try {
                LinearLayoutManager linearLayoutManager = ((LinearLayoutManager) recyclerView.getLayoutManager());

                int totalItemCount = linearLayoutManager.getItemCount();
                int lastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();

                Log.i(TAG, "onScrollListener, onScrolled(), totalItemCount : " + totalItemCount);
                Log.i(TAG, "onScrollListener, onScrolled(), lastVisibleItemPosition : " + lastVisibleItemPosition);

                int visibleThreshold = 1;

                Log.i(TAG, "onScrollListener, onScrolled(), visibleThreshold : " + visibleThreshold);

                if (!circularProgressViewDialog.isShowing() && totalItemCount <= (lastVisibleItemPosition + visibleThreshold)) {
                    oldDy = dy;
                    Log.i(TAG, "onScrollListener, onScrolled(), areMoreRecordsAvailable : " + areMoreRecordsAvailable);
                    if (areMoreRecordsAvailable) {
                        getJsonDataFromServerGetNewsList(++currentPage);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    };

    private View.OnClickListener onButtonClick() {
        Log.i(TAG, "onButtonClick() called . . .");

        return new View.OnClickListener() {
            @Override            public void onClick(View view) {
                if (view == fab_add_news) {

                    if (old_toolbar != null) {
                        old_toolbar.removeAllViews();
                        old_toolbar.setVisibility(View.GONE);
                        old_toolbar = null;
                    }

                    intent = new Intent(NewsActivity.this, AddEditNewsActivity.class);
                    startActivity(intent);
                } else {
                    Toast.makeText(NewsActivity.this, "", LENGTH_SHORT).show();
                }
                fab_news_menu.close(true);
            }
        };
    }

    private void prepareQuickActions() {
        Log.i(TAG, "prepareQuickActions() called . . .");

        try {
            editItem = new ActionItem();
            editItem.setIcon(getResources().getDrawable(R.drawable.edit));
            editItem.setOnClickListener(new View.OnClickListener() {

                @Override                public void onClick(View v) {

                    if (old_toolbar != null) {
                        old_toolbar.removeAllViews();
                        old_toolbar.setVisibility(View.GONE);
                        old_toolbar = null;
                    }

                    intent = new Intent(getApplicationContext(), AddEditNewsActivity.class);
                    intent.putExtra("newsId", newsJsonDataArrayList.get(position).getId());
                    startActivity(intent);
                }
            });

            deleteItem = new ActionItem();
            deleteItem.setIcon(getResources().getDrawable(R.drawable.delete));
            deleteItem.setOnClickListener(new View.OnClickListener() {

                @Override                public void onClick(View v) {
                    android.app.AlertDialog.Builder alertBuilder = new android.app.AlertDialog.Builder(new android.view.ContextThemeWrapper(NewsActivity.this, android.R.style.Theme_Holo_Light_Dialog));
                    ///alertBuilder.setCustomTitle(LayoutInflater.from(TransactionListActivity.this).inflate(R.layout.daily_rokad_icon_title, null));                    alertBuilder.setMessage(context.getResources().getString(R.string.are_you_sure_to_delete_this_news));
                    alertBuilder.setPositiveButton(context.getResources().getString(R.string.yes),
                            new DialogInterface.OnClickListener() {
                                @Override                                public void onClick(DialogInterface dialog, int which) {
                                    getJsonDataFromServerDeleteNews(newsJsonDataArrayList.get(position).getId());
                                }
                            });
                    alertBuilder.setNegativeButton(context.getResources().getString(R.string.no), null);
                    alertBuilder.setCancelable(false);
                    alertBuilder.create().show();
                }
            });

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void getJsonDataFromServerDeleteNews(int newsId) {
        Log.i(TAG, "getJsonDataFromServerDeleteNews(int) called newsId : " + newsId);
        try {
            JSONHandler jsonHandler = new JSONHandler(context);
            if (circularProgressViewDialog == null) {
                circularProgressViewDialog = new CircularProgressViewDialog(context);
            }
            circularProgressViewDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
            circularProgressViewDialog.showDialog();
            jsonHandler.deleteNews(new ReqResService() {

                @Override                public void onResponce(Object resObj, Object resCode) {
                    try {
                        if (Constants.ResponseStatusCodeString.SUCCESS.equals(resCode)) {
                            Snackbar.make(view, resObj.toString(), Snackbar.LENGTH_LONG).show();

                            newsJsonDataArrayList.remove(position);
                            newsActivityAdapter.setNewsList(newsJsonDataArrayList);
                            mHandler.sendEmptyMessage(Constants.ServiceCode.SERVICE_DELETE);

                        } else if (Constants.ResponseStatusCodeString.UNAUTHORIZED.equals(resCode)) {
                            Helper.logoutAutomatically(context, resObj.toString());
                        } else {
                            Helper.showOkDialog(Constants.ALERT_TITLE, resObj.toString(), (Activity) context);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        circularProgressViewDialog.hideDialog();
                    }
                }
            }, newsId);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void getJsonDataFromServerGetNewsList(int page) {
        Log.i(TAG, "getJsonDataFromServerGetNewsList(int) called for page : " + page);
        try {
            JSONHandler jsonHandler = new JSONHandler(context);
            if (circularProgressViewDialog == null) {
                circularProgressViewDialog = new CircularProgressViewDialog(context);
            }
            circularProgressViewDialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
            circularProgressViewDialog.showDialog();
            jsonHandler.getNewsList(new ReqResService() {

                @Override                public void onResponce(Object resObj, Object resCode) {
                    try {
                        if (Constants.ResponseStatusCodeString.SUCCESS.equals(resCode)) {
                            HashMap hashMap = new HashMap();
                            hashMap = (HashMap) resObj;

                            if (hashMap != null && hashMap.size() > 0) {
                                Log.i(TAG, "getJsonDataFromServerGetNewsList(), hashMap : " + hashMap.toString());

                                ArrayList<NewsJsonData> newsJsonDataArrayList = (ArrayList<NewsJsonData>) hashMap.get("news");
                                if (newsJsonDataArrayList != null && newsJsonDataArrayList.size() > 0) {
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), newsJsonDataArrayList : " + newsJsonDataArrayList.toString());

                                    relNoDataFound.setVisibility(relNoDataFound.GONE);

                                    NewsActivity.this.newsJsonDataArrayList.addAll(newsJsonDataArrayList);

                                    if (newsActivityAdapter == null) {
                                        newsActivityAdapter = new NewsActivityAdapter(context, inflater, mHandler, NewsActivity.this.newsJsonDataArrayList);
                                        rv_news_list.setAdapter(newsActivityAdapter);
                                    } else {
                                        newsActivityAdapter.setNewsList(NewsActivity.this.newsJsonDataArrayList);
                                    }

                                    int totalRecords = ((Integer) hashMap.get("totalRecords")).intValue();
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), totalRecords :  " + totalRecords);

                                    int perPageRecords = ((Integer) hashMap.get("perPageRecords")).intValue();
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), perPageRecords :  " + perPageRecords);

                                    int currentPage = ((Integer) hashMap.get("currentPage")).intValue();
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), currentPage :  " + currentPage);

                                    int lastPage = ((Integer) hashMap.get("lastPage")).intValue();
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), lastPage :  " + lastPage);

                                    int fromRecordNo = ((Integer) hashMap.get("fromRecordNo")).intValue();
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), fromRecordNo :  " + fromRecordNo);

                                    int toRecordNo = ((Integer) hashMap.get("toRecordNo")).intValue();
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), toRecordNo :  " + toRecordNo);

                                    String path = (String) hashMap.get("path");
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), path :  " + path);

                                    String prevPageURL = (String) hashMap.get("prevPageURL");
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), prevPageURL :  " + prevPageURL);

                                    String nextPageURL = (String) hashMap.get("nextPageURL");
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), nextPageURL :  " + nextPageURL);

                                    if (nextPageURL == null || ("").equals(nextPageURL) || ("null").equals(nextPageURL.toLowerCase())) {
                                        areMoreRecordsAvailable = false;
                                    } else {
                                        areMoreRecordsAvailable = true;
                                    }
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), areMoreRecordsAvailable :  " + areMoreRecordsAvailable);

                                } else {
                                    relNoDataFound.setVisibility(relNoDataFound.VISIBLE);
                                    Log.i(TAG, "getJsonDataFromServerGetNewsList(), newsJsonDataArrayList is null or empty");
                                }

                            } else {
                                Log.i(TAG, "getJsonDataFromServerGetNewsList(), hashMap is null or empty");
                            }

                        } else if (Constants.ResponseStatusCodeString.UNAUTHORIZED.equals(resCode)) {
                            Helper.logoutAutomatically(context, resObj.toString());
                        } else {
                            Helper.showOkDialog(Constants.ALERT_TITLE, resObj.toString(), (Activity) context);
                        }

                    } catch (Exception e) {
                        e.printStackTrace();
                    } finally {
                        circularProgressViewDialog.hideDialog();
                    }
                }
            }, page);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void scrollMyListViewToPosition(final int position) {
        Log.i(TAG, "scrollMyListViewToPosition(), called : ");
        rv_news_list.post(new Runnable() {
            @Override            public void run() {
                rv_news_list.getLayoutManager().scrollToPosition(position);
            }
        });
    }

    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {
        Log.i(TAG, "onKeyDown() called");
        return getParent().onKeyDown(keyCode, event);
    }

}

******************
package com.steembo.utils;

import android.support.v7.widget.RecyclerView;
import android.view.View;

import com.steembo.R;

/** * Created by Rahul on 23-08-2017. */
public class ItemClickSupport {

    private static final String TAG = "[ItemClickSupport] : ";

    private final RecyclerView mRecyclerView;
    private OnItemClickListener mOnItemClickListener;
    private OnItemLongClickListener mOnItemLongClickListener;
    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
        @Override        public void onClick(View v) {
            if (mOnItemClickListener != null) {
                // ask the RecyclerView for the viewHolder of this view.                // then use it to get the position for the adapter                RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
                mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPosition(), v);
            }
        }
    };
    private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() {
        @Override        public boolean onLongClick(View v) {
            if (mOnItemLongClickListener != null) {
                RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
                return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.getAdapterPosition(), v);
            }
            return false;
        }
    };
    private RecyclerView.OnChildAttachStateChangeListener mAttachListener            = new RecyclerView.OnChildAttachStateChangeListener() {
        @Override        public void onChildViewAttachedToWindow(View view) {
            // every time a new child view is attached add click listeners to it            if (mOnItemClickListener != null) {
                view.setOnClickListener(mOnClickListener);
            }
            if (mOnItemLongClickListener != null) {
                view.setOnLongClickListener(mOnLongClickListener);
            }
        }

        @Override        public void onChildViewDetachedFromWindow(View view) {

        }
    };

    private ItemClickSupport(RecyclerView recyclerView) {
        mRecyclerView = recyclerView;
        // the ID must be declared in XML, used to avoid        // replacing the ItemClickSupport without removing        // the old one from the RecyclerView        mRecyclerView.setTag(R.id.item_click_support, this);
        mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener);
    }

    public static ItemClickSupport addTo(RecyclerView view) {
        // if there's already an ItemClickSupport attached        // to this RecyclerView do not replace it, use it        ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
        if (support == null) {
            support = new ItemClickSupport(view);
        }
        return support;
    }

    public static ItemClickSupport removeFrom(RecyclerView view) {
        ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
        if (support != null) {
            support.detach(view);
        }
        return support;
    }

    public ItemClickSupport setOnItemClickListener(OnItemClickListener listener) {
        mOnItemClickListener = listener;
        return this;
    }

    public ItemClickSupport setOnItemLongClickListener(OnItemLongClickListener listener) {
        mOnItemLongClickListener = listener;
        return this;
    }

    private void detach(RecyclerView view) {
        view.removeOnChildAttachStateChangeListener(mAttachListener);
        view.setTag(R.id.item_click_support, null);
    }

    public interface OnItemClickListener {

        void onItemClicked(RecyclerView recyclerView, int position, View v);
    }

    public interface OnItemLongClickListener {

        boolean onItemLongClicked(RecyclerView recyclerView, int position, View v);
    }
}
*********************
<?xml version="1.0" encoding="utf-8"?><resources>
    <item name="item_click_support" type="id" />
    <item name="expandable_text" type="id" />
    <item name="expand_collapse" type="id" />
</resources>
****************
package com.steembo.customadapter;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Handler;
import android.support.v7.widget.CardView;
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.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.assist.ImageLoadingListener;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.steembo.R;
import com.steembo.helper.Helper;
import com.steembo.model.NewsJsonData;
import com.steembo.utils.Constants;
import com.steembo.utils.ImageLazyLoadingConfig;

import java.util.ArrayList;

public class NewsActivityAdapter extends RecyclerView.Adapter<NewsActivityAdapter.ViewHolder>{

    private static final String TAG = "[NewsActivityAdapter] : ";

    private LayoutInflater inflater;
    private ArrayList<NewsJsonData> newsJsonDataArrayList;
    private Context context;
    private Handler mHandler;
    private int position;

    public NewsActivityAdapter(Context context, LayoutInflater inflater, Handler mHandler, ArrayList<NewsJsonData> newsJsonDataArrayList) {
        this.context = context;
        this.inflater = inflater;
        this.mHandler = mHandler;
        this.newsJsonDataArrayList = newsJsonDataArrayList;
    }

    public void setNewsList(ArrayList<NewsJsonData> newsJsonDataArrayList) {
        Log.i(TAG, "setNewsList(ArrayList<NewsJsonData>) called for newsJsonDataArrayList : " + newsJsonDataArrayList);
        this.newsJsonDataArrayList = newsJsonDataArrayList;
        this.notifyDataSetChanged();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView tv_news_title, tv_source, tv_published_by, tv_published_on;
        ImageView iv_news_logo;
        CardView card_view;

        public ViewHolder(View view) {
            super(view);

            tv_news_title = (TextView) view.findViewById(R.id.tv_news_title);
            tv_source = (TextView) view.findViewById(R.id.tv_source);
            tv_published_by = (TextView) view.findViewById(R.id.tv_published_by);
            tv_published_on = (TextView) view.findViewById(R.id.tv_published_on);
            iv_news_logo = (ImageView) view.findViewById(R.id.iv_news_logo);
            card_view = (CardView) view.findViewById(R.id.card_view);
        }
    }

    @Override    public NewsActivityAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        LayoutInflater inflater = LayoutInflater.from(parent.getContext());

        View view = inflater.inflate(R.layout.news_activity_adapter_layout, parent, false);

        NewsActivityAdapter.ViewHolder holder = new NewsActivityAdapter.ViewHolder(view);
        return holder;
    }

    @Override    public int getItemCount() {
        return newsJsonDataArrayList.size();
    }

    @Override    public int getItemViewType(int position) {
        return position;
    }

    @Override    public void onBindViewHolder(final NewsActivityAdapter.ViewHolder holder, int position) {

        Log.i(TAG, "onBindViewHolder(), position : " + position);

        this.position = position;

        NewsJsonData newsJsonData = newsJsonDataArrayList.get(position);
        Log.i(TAG, "onBindViewHolder(), newsJsonData : " + newsJsonData.toString());

        if (position % 2 == 0) {
            holder.card_view.setCardBackgroundColor(context.getResources().getColor(R.color.list_view_color_1));
        } else {
            holder.card_view.setCardBackgroundColor(context.getResources().getColor(R.color.list_view_color_2));
        }

        holder.tv_news_title.setText(newsJsonData.getTitle());
        holder.tv_source.setText(newsJsonData.getSource());
        holder.tv_published_by.setText(newsJsonData.getPublishedBy());
        holder.tv_published_on.setText(newsJsonData.getPublishedOn());
        
        final Bitmap textBitmap = Helper.generateCircleBitmap(context,
                Constants.VALUE_NOT_PROVIDED,
                Helper.convertDpToPixel(60, context),
                newsJsonData.getTitle().substring(0, 1).toUpperCase());

        if (textBitmap != null) {
            holder.iv_news_logo.setImageBitmap(textBitmap);
        }
        
        String imageURL = newsJsonData.getNewsImagePath();
        
        if (imageURL != null) {
            try {
                ImageLoadingListener imageLoadingListener = new ImageLoadingListener() {
                    @Override                    public void onLoadingStarted(String imageUri, View view) {

                    }

                    @Override                    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

                    }

                    @Override                    public void onLoadingComplete(String imageUri, View view, Bitmap bitmap) {
                        Log.i(TAG, "onLoadingComplete(String, View, Bitmap) called for imageUri : " + imageUri + ", view : " + view + ", bitmap : " + bitmap);
                        try {
                            if (bitmap != null) {
                                ImageView imageView = (ImageView) view;
                                boolean firstDisplay = !ImageLazyLoadingConfig.displayedImages.contains(imageUri);
                                if (firstDisplay) {
                                    FadeInBitmapDisplayer.animate(imageView, 500);
                                    ImageLazyLoadingConfig.displayedImages.add(imageUri);
                                }
                            } else {
                                if (textBitmap != null) {
                                    holder.iv_news_logo.setImageBitmap(textBitmap);
                                }
                            }
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

                    @Override                    public void onLoadingCancelled(String imageUri, View view) {

                    }
                };
                Helper.displayImageUsingImageLoader(context, imageURL, holder.iv_news_logo, R.drawable.ic_launcher, imageLoadingListener);
            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            if (textBitmap != null) {
                holder.iv_news_logo.setImageBitmap(textBitmap);
            }
        }

    }
}

Comments

Popular posts from this blog

retrofil gjstatus lanuage

form object

Login Preference in android create class