package com.koushikdutta.boilerplate.simplelist;
import android.content.res.Resources;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.koushikdutta.boilerplate.R;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
/**
* Created by koush on 3/29/15.
*/
public class SimpleListFragmentAdapter extends RecyclerView.Adapter<SimpleListFragmentAdapter.IconListViewHolder> {
ArrayList<SimpleListItem> items = new ArrayList<SimpleListItem>();
Resources resources;
boolean selectable = true;
WeakReference<SimpleListItem> lastSelected;
Comparator<SimpleListItem> sort;
public void sort(Comparator<SimpleListItem> sort) {
this.sort = sort;
}
public class IconListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
SimpleListItem item;
public IconListViewHolder(View itemView) {
super(itemView);
}
@Override
public void onClick(View v) {
if (item.selectable() && selectable) {
lastSelected = new WeakReference<>(item);
notifyDataSetChanged();
}
item.onClick();
}
@Override
public boolean onLongClick(View v) {
return item.onLongClick();
}
}
@Override
public int getItemViewType(int position) {
return items.get(position).getViewType();
}
@Override
public IconListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
IconListViewHolder vh = new IconListViewHolder(view);
if (viewType != R.layout.simple_list_divider) {
view.setOnClickListener(vh);
view.setOnLongClickListener(vh);
}
return vh;
}
@Override
public void onBindViewHolder(IconListViewHolder holder, int position) {
holder.item = items.get(position);
holder.item.bindView(holder.itemView);
if (lastSelected != null && lastSelected.get() == holder.item)
holder.itemView.setSelected(true);
else
holder.itemView.setSelected(false);
}
@Override
public int getItemCount() {
return items.size();
}
public SimpleListFragmentAdapter(SimpleListFragment fragment) {
this(fragment.getResources());
}
public SimpleListFragmentAdapter(Resources resources) {
this.resources = resources;
}
public SimpleListItem getItem(int i) {
return items.get(i);
}
public boolean hasItem(SimpleListItem item) {
return items.contains(item);
}
protected void internalChanged() {
if (sort != null)
Collections.sort(items, sort);
notifyDataSetChanged();
}
public SimpleListFragmentAdapter add(SimpleListItem item) {
return insert(item, getItemCount());
}
public SimpleListFragmentAdapter remove(SimpleListItem item) {
items.remove(item);
internalChanged();
return this;
}
public SimpleListFragmentAdapter clear() {
items.clear();
internalChanged();
return this;
}
public SimpleListFragmentAdapter insert(SimpleListItem item, int index) {
item.setAdapter(this);
items.add(index, item);
internalChanged();
return this;
}
public SimpleListFragmentAdapter selectable(boolean selectable) {
this.selectable = selectable;
if (!selectable && lastSelected != null) {
lastSelected = null;
notifyDataSetChanged();
}
return this;
}
}