2

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.

Design Required

What I've got so far is this:

Gif

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);
    }
}
Ispam
  • 495
  • 7
  • 18

0 Answers0