Skip to content

Instantly share code, notes, and snippets.

@esabook
Last active January 19, 2020 09:07
Show Gist options
  • Save esabook/0643f89a1dd178d2ca503b932c61f79b to your computer and use it in GitHub Desktop.
Save esabook/0643f89a1dd178d2ca503b932c61f79b to your computer and use it in GitHub Desktop.
for BannerRecycleView
package ***;
import android.graphics.drawable.Drawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.CenterCrop;
import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.Target;
import java.util.ArrayList;
import java.util.List;
public class BannerAdapter extends RecyclerView.Adapter<BannerViewHolder>
implements View.OnClickListener {
public static final String TAG = BannerAdapter.class.getSimpleName();
public List<Banner> items = new ArrayList<>();
public BannerAdapter(List<Banner> items) {
this.items = items == null ? new ArrayList<Banner>() : items;
}
@NonNull
@Override
public BannerViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.item_banner_type_image, viewGroup, false);
return new BannerViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final BannerViewHolder viewHolder, int i) {
viewHolder.setBanner(items.get(i));
viewHolder.itemView.setTag(i);
viewHolder.itemView.setOnClickListener(this);
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public void onClick(View v) {
try {
int pos = (int) v.getTag();
Banner banner = items.get(pos);
//
// //TODO: egit: launching intent by specific url intent, like this
// Uri uri = Uri.parse(banner.getUrl());
//
// String action = Intent.ACTION_VIEW;
//
// Intent intent = new Intent(action, uri);
// v.getContext().startActivity(intent);
if (banner.getUrl() != null)
Function.directToWeb(v.getContext(), banner.getUrl());
else
Function.shoutToast(v.getContext(), "Link tidak ditemukan");
} catch (Exception i) {
i.printStackTrace();
}
}
class BannerViewHolder extends RecyclerView.ViewHolder implements RequestListener<Drawable> {
final CardView vCardView;
final AppCompatImageView vImageView;
final AppCompatTextView vTitleTextView;
Banner mBanner;
final int displayWidthPx;
final RoundedCorners imageRoundedCorner = new RoundedCorners(12);
final RequestOptions transformOption = new RequestOptions().transforms(new CenterCrop(), imageRoundedCorner);
public BannerViewHolder(@NonNull View itemView) {
super(itemView);
displayWidthPx = itemView.getResources().getDisplayMetrics().widthPixels;
vCardView = itemView.findViewById(R.id.banner_root);
vImageView = itemView.findViewById(R.id.banner_image);
vTitleTextView = itemView.findViewById(R.id.banner_title);
}
public Banner getBanner() {
return mBanner;
}
public void setBanner(Banner banner) {
this.mBanner = banner;
invalidateView();
}
private void invalidateView() {
try {
vTitleTextView.setText(null);
Glide.with(vCardView.getContext())
.load(mBanner.getImage())
.placeholder(R.drawable.bg_card_grey)
.fallback(R.drawable.bg_card_green)
.error(R.drawable.bg_card_green)
.apply(transformOption)
.addListener(this)
.into(vImageView);
} catch (Exception ignore) {
ignore.printStackTrace();
}
}
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model,
Target<Drawable> target, boolean isFirstResource) {
vTitleTextView.setVisibility(View.VISIBLE);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target,
DataSource dataSource, boolean isFirstResource) {
vTitleTextView.setVisibility(View.GONE);
return false;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment