package com.cjj.nices.adapter; import android.graphics.Color; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.cjj.nices.activity.R; import com.cjj.nices.activity.R.color; import com.cjj.nices.activity.R.id; import com.cjj.nices.activity.R.layout; import com.cjj.nices.callback.NavigationDrawerCallbacks; import com.cjj.nices.model.NavigationItem; import com.cjj.nices.model.NicesApplication; import static com.norbsoft.typefacehelper.TypefaceHelper.typeface; import java.util.List; public class NavigationDrawerAdapter extends RecyclerView.Adapter<NavigationDrawerAdapter.ViewHolder> { private List<NavigationItem> mData; private NavigationDrawerCallbacks mNavigationDrawerCallbacks; private int mSelectedPosition; private int mTouchedPosition; private boolean isClick = false; public NavigationDrawerAdapter(List<NavigationItem> data) { mData = data; } public NavigationDrawerCallbacks getNavigationDrawerCallbacks() { return mNavigationDrawerCallbacks; } public void setNavigationDrawerCallbacks(NavigationDrawerCallbacks navigationDrawerCallbacks) { mNavigationDrawerCallbacks = navigationDrawerCallbacks; } @Override public NavigationDrawerAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.drawer_row, viewGroup, false); return new ViewHolder(v); } @Override public void onBindViewHolder(NavigationDrawerAdapter.ViewHolder viewHolder, final int i) { viewHolder.textView.setText(mData.get(i).getText()); viewHolder.textView.setCompoundDrawablesWithIntrinsicBounds(mData.get(i).getDrawable(), null, null, null); typeface(viewHolder.itemView,NicesApplication.nicesApplication.getKatongTypeface()); viewHolder.itemView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touchPosition(i); return false; case MotionEvent.ACTION_CANCEL: touchPosition(-1); return false; case MotionEvent.ACTION_MOVE: return false; case MotionEvent.ACTION_UP: touchPosition(-1); return false; } return true; } } ); viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mNavigationDrawerCallbacks != null) mNavigationDrawerCallbacks.onNavigationDrawerItemSelected(i); } } ); //TODO: selected menu position, change layout accordingly if (mSelectedPosition == i || mTouchedPosition == i) { viewHolder.itemView.setBackgroundColor(viewHolder.itemView.getContext().getResources().getColor(R.color.selected_gray)); setTextSelectColor(i,viewHolder.textView); } else { viewHolder.textView.setTextColor(Color.BLACK); viewHolder.itemView.setBackgroundColor(Color.TRANSPARENT); } } private void setTextSelectColor(int index,TextView tv) { switch(index) { case 0: tv.setTextColor(Color.RED); break; case 1: tv.setTextColor(Color.rgb(52, 134, 248)); break; case 2: tv.setTextColor(Color.rgb(251, 192, 45)); break; case 3: tv.setTextColor(Color.rgb(250, 67, 122)); break; } } private void touchPosition(int position) { int lastPosition = mTouchedPosition; mTouchedPosition = position; if (lastPosition >= 0) notifyItemChanged(lastPosition); if (position >= 0) notifyItemChanged(position); } public void selectPosition(int position) { int lastPosition = mSelectedPosition; mSelectedPosition = position; notifyItemChanged(lastPosition); notifyItemChanged(position); } @Override public int getItemCount() { return mData != null ? mData.size() : 0; } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView textView; public ViewHolder(View itemView) { super(itemView); textView = (TextView) itemView.findViewById(R.id.item_name); } } }