I have an app which stores some expiration dates and displays them in the MainActivity.
I am trying to accomplish what is on the first image, but im not there yet.
What I've got so far is this:
My Problem:
- How do I clip First RecyclerView to stay in the center when clicked right or left? (I'll work on animation for chaging bg color and bold-text after i resolve this)
- How do I Sync both RecyclerViews to change to the desired position when clicked?
This is what I Have tried:
These work more or less, on first link i managed to get the position but do not know what to do with the position; on second link it does sync, but i need to scroll to position when Clicked. SIDE-NOTE: I user PagerSnapHelper on both RecyclerViews.
If you need any other Activity or have any feedback, please comment!
Home
public class Home extends BaseActivity {
private DBHelper mDBHelper;
private Context mContext;
private RecyclerView mRecyclerViewDetails, mRecyclerViewSymbols;
private HomeDetailsAdapter mDetailsAdapter;
private HomeSymbolsAdapter mSymbolsAdapter;
private LinearLayoutManager mLinearLayoutManager;
private LinearLayoutPagerManager mLinearLayoutPagerManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
super.onCreateDrawer();
mDBHelper = new DBHelper(getApplicationContext());
mRecyclerViewDetails = (RecyclerView) findViewById(R.id.recycler_view_details);
mRecyclerViewSymbols = (RecyclerView) findViewById(R.id.recycler_view_symbols);
mSymbolsAdapter = new HomeSymbolsAdapter(mContext, mDBHelper.getAllDates(), new HomeSymbolsAdapter.clickCallback() {
@Override
public void onItemClick(int position) {
mRecyclerViewSymbols.scrollToPosition(position);
Log.d("Home", String.valueOf(position));
}
});
mRecyclerViewSymbols.setAdapter(mSymbolsAdapter);
mLinearLayoutPagerManager = new LinearLayoutPagerManager(mContext, LinearLayoutManager.HORIZONTAL, false, 3);
mRecyclerViewSymbols.setLayoutManager(mLinearLayoutPagerManager);
mRecyclerViewSymbols.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2);
mDetailsAdapter = new HomeDetailsAdapter(mContext, mDBHelper.getAllDates());
mRecyclerViewDetails.setAdapter(mDetailsAdapter);
mLinearLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false);
mRecyclerViewDetails.setLayoutManager(mLinearLayoutManager);
mRecyclerViewDetails.getLayoutManager().scrollToPosition(Integer.MAX_VALUE / 2);
PagerSnapHelper snapHelper = new PagerSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerViewDetails);
PagerSnapHelper snapHelper2 = new PagerSnapHelper();
snapHelper2.attachToRecyclerView(mRecyclerViewSymbols);
}
HomeSymbolsAdapter
public class HomeSymbolsAdapter extends RecyclerView.Adapter<HomeSymbolsAdapter.ViewHolder> {
private Context mContext;
private DBHelper mDBHelper;
private ArrayList<Date> mDatesList;
private clickCallback mClickCallback;
private final static int ITEMS_PER_PAGE = 3;
public HomeSymbolsAdapter(Context context, ArrayList<Date> datesList, clickCallback clickCallback) {
mContext = context;
mDatesList = datesList;
mClickCallback = clickCallback;
}
public interface clickCallback{
void onItemClick(int position);
}
@Override
public HomeSymbolsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.format_home_symbols, parent, false));
}
@Override
public void onBindViewHolder(HomeSymbolsAdapter.ViewHolder holder, int position) {
int positionInList = position % mDatesList.size();
Date date = mDatesList.get(positionInList);
holder.mSymbol.setText(date.getSymbol());
}
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView mSymbol;
public ViewHolder(View view) {
super(view);
mSymbol = (TextView) view.findViewById(R.id.symbols_tv);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mClickCallback.onItemClick(getAdapterPosition());
}
});
}
}
HomeDetailsAdapter
public class HomeDetailsAdapter extends RecyclerView.Adapter<HomeDetailsAdapter.ViewHolder> {
private Context mContext;
private ArrayList<Date> mDates;
public HomeDetailsAdapter(Context context, ArrayList<Date> dates) {
mContext = context;
mDates = dates;
}
@Override
public HomeDetailsAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.format_home, parent, false));
}
@Override
public void onBindViewHolder(HomeDetailsAdapter.ViewHolder holder, int position) {
int positionInList = position % mDates.size();
Date date = mDates.get(positionInList);
holder.mName.setText(date.getName());
holder.mDaysLeft.setText("125");
holder.mDays.setText(R.string.days);
holder.mDate.setText(date.getDate());
}
@Override
public int getItemCount() {
return Integer.MAX_VALUE;
}
public class ViewHolder extends RecyclerView.ViewHolder{
public TextView mName, mDaysLeft, mDays, mDate;
public ViewHolder(View view) {
super(view);
mName = (TextView) view.findViewById(R.id.format_home_name);
mDaysLeft = (TextView) view.findViewById(R.id.format_home_days_left);
mDays = (TextView) view.findViewById(R.id.format_home_days);
mDate = (TextView) view.findViewById(R.id.format_home_date);
}
}