Skip to content

Instantly share code, notes, and snippets.

@dleonett
Last active June 20, 2017 20:14
Show Gist options
  • Save dleonett/80f780522e90ecf92bb54dc9fe69cdb7 to your computer and use it in GitHub Desktop.
Save dleonett/80f780522e90ecf92bb54dc9fe69cdb7 to your computer and use it in GitHub Desktop.
Base adapter for simple item selection
package com.example.daniel.testapplication.ui.base;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Daniel Leonett ([email protected]) on 20/6/2017.
*/
public abstract class BaseSimpleSelectionAdapter<Item> extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final String TAG = BaseSimpleSelectionAdapter.class.getSimpleName();
protected List<Item> mItems = new ArrayList<>();
protected boolean[] mSelectedPositions = new boolean[0];
public void setItems(List<Item> items) {
mItems.clear();
mItems.addAll(items);
mSelectedPositions = new boolean[mItems.size()];
notifyDataSetChanged();
}
public void clearItems() {
mItems.clear();
mSelectedPositions = new boolean[0];
notifyDataSetChanged();
}
public boolean isItemSelected(int adapterPosition) {
return adapterPosition >= 0
&& adapterPosition < mSelectedPositions.length
&& mSelectedPositions[adapterPosition];
}
public void selectItem(int adapterPosition) {
selectItemAndClearOthers(adapterPosition);
notifyDataSetChanged();
}
private void selectItemAndClearOthers(int selectedPosition) {
for (int i = 0; i < mSelectedPositions.length; i++) {
mSelectedPositions[i] = (i == selectedPosition);
}
}
public Item getSelectedItem() {
for (int i = 0; i < mSelectedPositions.length; i++) {
if (mSelectedPositions[i]) {
return mItems.get(i);
}
}
return null;
}
public int getSelectedPosition() {
for (int i = 0; i < mSelectedPositions.length; i++) {
if (mSelectedPositions[i]) {
return i;
}
}
return -1;
}
}
package com.example.daniel.testapplication.ui.users;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.example.daniel.testapplication.R;
import com.example.daniel.testapplication.ui.base.BaseSimpleSelectionAdapter;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by Daniel Leonett ([email protected]) on 20/6/2017.
*/
class UsersAdapter extends BaseSimpleSelectionAdapter<User> {
public UsersAdapter() {
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater vi = LayoutInflater.from(parent.getContext());
View v = vi.inflate(R.layout.item_list_user, parent, false);
return new ViewHolderItem(v);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
final int finalPosition = position;
User user = mItems.get(position);
boolean selected = isItemSelected(position);
final ViewHolderItem viewHolderItem = (ViewHolderItem) holder;
viewHolderItem.tvName.setText(user.getName());
Glide.with(viewHolderItem.itemView.getContext())
.load(user.getAvatarUrl())
.into(viewHolderItem.ivAvatar);
viewHolderItem.checkedIndicator.setVisibility((selected) ? View.VISIBLE : View.INVISIBLE);
viewHolderItem.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
selectItem(finalPosition);
}
});
}
@Override
public int getItemCount() {
return mItems.size();
}
public static class ViewHolderItem extends RecyclerView.ViewHolder {
@BindView(R.id.ivAvatar)
ImageView ivAvatar;
@BindView(R.id.tvName)
TextView tvName;
@BindView(R.id.checkedIndicator)
View checkedIndicator;
public ViewHolderItem(View view) {
super(view);
ButterKnife.bind(this, view);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment