Last active
June 20, 2017 20:14
-
-
Save dleonett/80f780522e90ecf92bb54dc9fe69cdb7 to your computer and use it in GitHub Desktop.
Base adapter for simple item selection
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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