Search code examples
javaandroidtimercardslib

How can i show count down timer on card title in android?


When i try to show timer on textView with setText method, it is working. But here timer (text) does not get any update, shows only "0, 0, 0, 0" on card. I'm using cardslib library to show cards. I don't know if it is possible to show timer on cards. Can anyone help me to overcome this?

*This is my code:

long day, hour, min, sec;
MyCard card;

        ArrayList<Card> cards = new ArrayList<Card>();
        card = new MyCard(getActivity());
        card.mainHeader= "Main Header";
        card.mainTitle = "Main Title";

    new CountDownTimer(86500000, 1000) { // adjust the milli seconds here

        public void onTick(long millisUntilFinished) {

        card.secondaryTitle = day + " day, " + hour + " hour, " + min + " minute, " + sec + " second";
            day = TimeUnit.MILLISECONDS.toDays(millisUntilFinished);
            hour = TimeUnit.MILLISECONDS.toHours(millisUntilFinished) - TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(millisUntilFinished));
            min = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished));
            sec = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished));

        }
        public void onFinish() {card.secondaryTitle = ("done!");}
    }.start();

        card.resourceIdThumb = R.drawable.ic_school_black_48dp;

        CardHeader header = new CardHeader(getActivity());
        header.setTitle(card.mainHeader);
        //Add Header to card
        card.addCardHeader(header);

        //Add the thumbnail
        CardThumbnail thumb = new CardThumbnail(getActivity());
        thumb.setDrawableResource(card.resourceIdThumb);
        card.addCardThumbnail(thumb);

        card.setOnClickListener(listener);

        cards.add(card);

Sorry i couldn't upload image because of my reputation. This is the link for picture of my card:

http://tinypic.com/view.php?pic=a2vdx5&s=8#.VeShM_btmko


Solution

  • I solved my problem by using setupInnerViewElements method in cardslib. I put CountDownTimer class into this method and it's worked. This is my java code:

        public MyCard1(Context context) {
                super(context, R.layout.home_card_inner_content1);
        }
    
        @Override
        public void setupInnerViewElements(ViewGroup parent, View view) {
    
            TextView mTitleTextView1 = (TextView) parent.findViewById(R.id.home_card_main_inner_title1);
            final TextView mSecondaryTitleTextView1 = (TextView) parent.findViewById(R.id.home_card_main_inner_subtitle1);
    
                new CountDownTimer(86500000, 1000) { // adjust the milli seconds here
    
                    public void onTick(long millisUntilFinished) {
    
                        day1 = TimeUnit.MILLISECONDS.toDays(millisUntilFinished);
                        hour1 = TimeUnit.MILLISECONDS.toHours(millisUntilFinished)- TimeUnit.DAYS.toHours(TimeUnit.MILLISECONDS.toDays(millisUntilFinished));
                        min1 = TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millisUntilFinished));
                        sec1 = TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished));
                        mSecondaryTitleTextView1.setText(day1 + " day, " + hour1 + " hour, " + min1 + " minute, " + sec1 + " second");
                    }
                    public void onFinish() {mSecondaryTitleTextView1.setText("done!");}
                }.start();
    
            if (mTitleTextView1 != null)
                mTitleTextView1.setText(mainTitle1);
    
            if (mSecondaryTitleTextView1 != null)
                mSecondaryTitleTextView1.setText(secondaryTitle1);
        }
    }