Question

i have a listview in which countdowntimer is working.,now i want to add use countdowntimer with calender.,in which time of calender should be countdown like reverse order..,i tried some code but that was working in forward way..,how can i use countdowntimer with calender in listview adapter.

 public class CountDownList extends ListActivity {  
private ArrayList<MyData> mDataList = new ArrayList<MyData>();

private Handler mHandler;
private ArrayAdapter<MyData> mListAdapter;
private boolean mCountersActive;

public CountDownList() {
    mHandler = new Handler();
}

private final Runnable mRunnable = new Runnable() {
    public void run() {
        MyData myData;          
        // if counters are active
        if (mCountersActive) {              
            if (mDataList != null) {
                for (int i=0; i < mDataList.size(); i++) {
                    myData = mDataList.get(i);
                    if (myData.getCount() >= 0) {
                        myData.reduceCount();
                    }
                }
                // notify that data has been changed
                mListAdapter.notifyDataSetChanged();
            }
            // update every second
            mHandler.postDelayed(this, 1000);
        }
    }
};

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    // add some test data
    mDataList = new ArrayList<MyData>();
    MyData data;
    int j = 10;
    for (int i=0; i < 1000; i++) {
        data = new MyData(Integer.toString(j), j);
        mDataList.add(data);
        j = j + 10;
    }

    initData();
}

private void initData() {
    // set the list adapter
    mListAdapter = new MyListAdapter(this, R.layout.row, mDataList);
    setListAdapter(mListAdapter);       
    // start counters
    stopStart();
}   

private void stopStart() {
    if (mCountersActive) {
        mCountersActive = false;

    } else {
        mCountersActive = true;
        mHandler.post(mRunnable);
    }
}

private class MyListAdapter extends ArrayAdapter<MyData> {

    private ArrayList<MyData> items;
    private LayoutInflater vi = (LayoutInflater) 
            getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    public MyListAdapter(Context context, int textViewResourceId,
            ArrayList<MyData> items) {
        super(context, textViewResourceId, items);
        this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {                                 
        if (convertView == null) {
            convertView = vi.inflate(R.layout.row, null);
        }

        MyData myData = items.get(position);

        if (myData != null) {
            TextView text = (TextView) convertView.findViewById(R.id.myTextView);
            if (text != null) {
                text.setText(myData.getText());
            }

            TextView counter = (TextView) convertView.findViewById(R.id.myTextViewTwo);
            if (counter != null) {
                counter.setText(myData.getCountAsString());             
            }
        }           

        return convertView;
    }       
}

private class MyData {
    private String text;
    private int count;

    public MyData(String text, int count) {
        this.text = text;
        this.count = count;
    }

    public String getText() {
        return text;
    }

    public int getCount() {
        return count;
    }

    public String getCountAsString() {
        return Integer.toString(count);
    }

    public void reduceCount() {
        if (count > 0) {
            count--;
        }
    }
}
}
Was it helpful?

Solution

package com.example.diffrence;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

    ListView listView;
    ArrayAdapter<String> adapter;
    Date date1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.list);

        Timer notificationtask = new Timer();








        // Define a new Adapter
        // First parameter - Context
        // Second parameter - Layout for the row
        // Third parameter - ID of the TextView to which the data is written
        // Forth - the Array of data







        // Assign adapter to ListView

//      adapter = new ArrayAdapter<String>(this,
//              android.R.layout.simple_list_item_1, android.R.id.text1, values);
//
//      listView.setAdapter(adapter);
        // ListView Item Click Listener
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {

                // ListView Clicked item index
                int itemPosition = position;

                // ListView Clicked item value
                String itemValue = (String) listView
                        .getItemAtPosition(position);

                // Show Alert
                Toast.makeText(
                        getApplicationContext(),
                        "Position :" + itemPosition + "  ListItem : "
                                + itemValue, Toast.LENGTH_LONG).show();

            }

        });

        Date now = new Date();  
        Calendar cal = Calendar.getInstance();  
        cal.setTime(now);  
        cal.add(Calendar.DAY_OF_YEAR, 1); // <--  
        final Date tomorrow = cal.getTime();



        Calendar cal1 = Calendar.getInstance();  
        cal1.setTime(now);  
        cal1.add(Calendar.DAY_OF_YEAR, 50); // <--  pass the value of days you want
        final Date lastdate = cal1.getTime();


        final ArrayList<Date> date = (ArrayList<Date>) obtenerFechasDiariasIntervalo(tomorrow, lastdate);
        final String[] values1 = new String[date.size()];
        final SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
                "dd/M/yyyy hh:mm:ss");
        for(int i= 0 ; i<date.size(); i++){

            String currentDateandTime = simpleDateFormat
                    .format(new Date());

            try {
                date1 = simpleDateFormat
                        .parse(currentDateandTime);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Date date2 = date.get(i);

            values1[i] =  "diffrence to date "+date.get(i) + " : " +printDifference(date1, date2);

        }
        adapter = new ArrayAdapter<String>(getApplicationContext(),
                android.R.layout.simple_list_item_1, android.R.id.text1, values1){
                    @Override
                    public View getView(int position, View convertView,
                            ViewGroup parent) {
                        TextView textView = (TextView) super.getView(
                                position, convertView, parent);
                        textView.setTextColor(Color.BLACK);

                        return textView;
                    }
                };
        listView.setAdapter(adapter);
        notificationtask.schedule(new TimerTask() {
            @Override
            public void run() {
                // TODO Auto-generated method stub
                runOnUiThread(new Runnable() {

                    @Override
                    public void run() {
                        // TODO Auto-generated method stub

                        try {

                            for(int i= 0 ; i<date.size(); i++){

                                String currentDateandTime = simpleDateFormat
                                        .format(new Date());
                                Date date1 = simpleDateFormat
                                        .parse(currentDateandTime);
                                Date date2 = date.get(i);

                                values1[i] =  "diffrence to date "+date.get(i) + " : " +printDifference(date1, date2);

                            }
                            adapter.notifyDataSetChanged();
//                          txt.setText("time Remainig to date 10/10/2014 11:30:10    : "
//                                  + printDifference(date1, date2));

                        } catch (ParseException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                    }
                });
            }
        }, 1000, 1000);

    }

    public static List<Date> obtenerFechasDiariasIntervalo(Date fechaInicial, Date fechaFinal)
    {
        List<Date> dates = new ArrayList<Date>();
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(fechaInicial);

        while (calendar.getTime().before(fechaFinal))
        {
            Date resultado = calendar.getTime();
            dates.add(resultado);
            calendar.add(Calendar.DATE, 1);
        }
        return dates;
    }



    public String printDifference(Date startDate, Date endDate) {

        // milliseconds
        long different = endDate.getTime() - startDate.getTime();

        System.out.println("startDate : " + startDate);
        System.out.println("endDate : " + endDate);
        System.out.println("different : " + different);

        long secondsInMilli = 1000;
        long minutesInMilli = secondsInMilli * 60;
        long hoursInMilli = minutesInMilli * 60;
        long daysInMilli = hoursInMilli * 24;

        long elapsedDays = different / daysInMilli;
        different = different % daysInMilli;

        long elapsedHours = different / hoursInMilli;
        different = different % hoursInMilli;

        long elapsedMinutes = different / minutesInMilli;
        different = different % minutesInMilli;

        long elapsedSeconds = different / secondsInMilli;

        return Math.abs(elapsedDays) + " days     " + Math.abs(elapsedHours)
                + " hours   " + Math.abs(elapsedMinutes) + " minute   "
                + Math.abs(elapsedSeconds) + " Seconds  ";

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top