user3345596
user3345596

Reputation: 63

How to hold scroll position of RecyclerView while refreshing adapter?

I have created a multiple timer application. In that, I have use RecyclerView for showing each timer as a list. As per my logic every second, I call RecyclerView and refresh the screen for update the sec value and show it. But my issue is when the timer list increases and scroll the screen, the screen is not holding scrolling position. So how can I do that? Waiting for better suggestion.

Following is my code:-

public class Time_Tab_Activity extends AppCompatActivity {

 private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new Running_Timer_Fragment(), "Running Timer");
        adapter.addFragment(new Stop_Timer_Fragment(), "View Time");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finish();
        }
        return super.onOptionsItemSelected(item);
    }
}


public class Running_Timer_Fragment extends Fragment {

 private void countdowntimer() {
        new CountDownTimer(1000, 1000) {

            public void onTick(long millisUntilFinished) {

            }

            public void onFinish() {
                showall();
            }

        }.start();
    }

    private void showall()
    {
        Plant_arraylist.clear();
        if(mydb.numberOfRows_PO_Time()>0)
        {
            Log.i("Condition","True");

            if (isAdded()){
                Plant_arraylist = mydb.Running_Get_PO_Time_Details(poNumber);
                RecyclerViewNewtime recyclerViewadapter1 = new RecyclerViewNewtime(Plant_arraylist,getActivity().getBaseContext());
                recyclerView.setAdapter(recyclerViewadapter1);
                countdowntimer();

                // Save state
                 Parcelable recyclerViewState;
                recyclerViewState = recyclerView.getLayoutManager().onSaveInstanceState();

// Restore state
                recyclerView.getLayoutManager().onRestoreInstanceState(recyclerViewState);

            }
        }
    }
}

public class RecyclerViewNewtime extends RecyclerView.Adapter<RecyclerViewNewtime.ViewHolder>{

 @Override
    public void onBindViewHolder(final ViewHolder holder, int position) {





        final DataAdapter dataAdapter = dataAdapters.get(position);

        final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
        String diff ="",diff1="";
        int hours = 0,hours1=0;
        int mins = 0,min1=0;
        int sec=0,sec1=0;
        Date date1 = null,date2=null,date3=null;

        Calendar c = Calendar.getInstance();
        String startDate = format.format(c.getTime());
        try {
            Log.e("Start date",startDate  );
            date1 = format.parse(dataAdapter.getSTART_TIME_D());
            date2 = format.parse(startDate);
            long mills = date2.getTime() - date1.getTime();
            //hours = (int) (mills/(1000 * 60 * 60));
            //mins = (int) (mills/(1000*60)) % 60;
            mins=(int) (mills / 1000)  / 60;
            sec=(int) (mills/1000)%60;


            diff =  String.format("%02d", mins)+ ":"
                    +String.format("%02d", sec);

            date3=format.parse(dataAdapter.getPAUSE_TIME_D());
            long mills1= date3.getTime()-date1.getTime();

           // hours1 = (int) (mills1/(1000 * 60 * 60));
            //min1 = (int) (mills1/(1000*60)) % 60;
            min1=mins=(int) (mills1 / 1000)  / 60;
            sec1= (int) (mills1/1000)%60;

            diff1 =  String.format("%02d", min1)+ ":"
                    +String.format("%02d", sec1);

        } catch (ParseException e) {
            e.printStackTrace();
        }
        String holderpo = "<b>" + "PO: " + "</b> " + "<font color='#3F51B5'>" + dataAdapter.getPRODUCTION_ORDER_D() + "</font>";
        holder.po.setText(Html.fromHtml(holderpo));
        String holderwc = "<b>" + "WC: " + "</b> " + "<font color='#3F51B5'>" + dataAdapter.getWORK_CENTER_D() + "</font>";
        holder.wc.setText(Html.fromHtml(holderwc));
        String holderop = "<b>" + "OP: " + "</b> " + "<font color='#3F51B5'>" + dataAdapter.getOPERATION_D() + "</font>";
        holder.op.setText(Html.fromHtml(holderop));
        String holderopr = "<b>" + "Operator: " + "</b> " + "<font color='#3F51B5'>" + dataAdapter.getOPERATOR_D() + "</font>";
        holder.opr.setText(Html.fromHtml(holderopr));
        /*holder.stp.setText("Time: "+dataAdapter.getSTOP_TIME_D()+":00");*/

Upvotes: 1

Views: 2324

Answers (0)

Related Questions