2014-12-04 89 views
0

我正在嘗試使用GregorianCalendar對象填充ArrayList,以便我可以進一步將其附加到列表視圖適配器。顯示的快照here是我想要實現.....我希望日期對象的列表成爲組列表視圖,以便它可以與特定日子下的事件(即事件將是子列表視圖)進行比較。到目前爲止,我已經編寫了一些代碼,但它並沒有像snapshot那樣用日期填充數組列表,而是僅添加當前日期(即只有一個元素)。提前致謝。使用GregorianCalendar日期對象填充ArrayList

這裏是我的代碼

public class EventFragment extends Fragment{ 

List<GregorianCalendar> dates = new ArrayList<GregorianCalendar>(); 
List<Events> events = new ArrayList<Events>(); 

SimpleDateFormat dateFormat; 
GregorianCalendar calendar_date; 

public EventFragment(){ } 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_events, container, false); 
    return rootView; 
} 

@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    listView = (ListView) getView().findViewById(R.id.list); 

    dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    calendar_date = new GregorianCalendar(); 
    dates.add(calendar_date); 

    for(int i = 0; i < dates.size(); i++){ 
     Log.e("Date", ""+calendar_date.get(i)); 
    }  
} 
} 
+0

您只添加到列表一次('dates.add(calendar_date);')。 – GriffeyDog 2014-12-04 21:10:43

+0

@GriffeyDog,我將(dates.add(calendar_date);)移到循環中,它仍然返回與今天相關的日期 – mish 2014-12-04 21:18:24

+0

@mish:'GregorianCalendar'只能表示一個日期/時間。它不是像日曆應用程序那樣具有多個日期的「完整」日曆。 – Squonk 2014-12-04 21:22:03

回答

0

這實際上比我想你實現更多複雜。這並不困難,但需要更多的代碼。

我可以舉一個簡單的例子來生成如下的日期範圍。爲了簡單起見,我就做一月份 - 2015年1月,例如...

Calendar startDate = new GregorianCalendar(); 

// Set the start date to 1st Jan 2015 and time to 00:00:00 using 
// set(int year, int month, int day, int hourOfDay, int minute, int second) 
// NOTE: the month field is in the range 0-11 with January being 0 
startDate.set(2015, 0, 1, 0, 0, 0); 

// Clone the start date and add one month to set the end date to 
// 1st February 2015 00:00:00 
Calendar endDate = startDate.clone(); 
endDate.add(Calendar.MONTH, 1); // This adds 1 month 

// Step through each day from startDate to endDate (not including endDate itself) 
while (startDate.before(endDate)) { 

    // Do whatever you need to do here to get the date string from startDate 
    // using SimpleDateFormat for example. For logging purposes you can 
    // use the next line... 
    Log.e("Date", startDate.toString()); 

    // Now increment the day as follows... 
    startDate.add(Calendar.DAY_OF_MONTH, 1); 
} 

你需要做大量的工作,當談到節省事件數據,我會建議使用一個SQLite數據庫。然後我會建議你改變你的日期列表來簡單地保存格式化的日期字符串而不是GregorianCalendar的實例。

List<String> dates = new ArrayList<String>(); 
+0

謝謝你的回答.....它啓發了我更多。請你可以向我推薦任何有幫助的源代碼。 – mish 2014-12-04 23:57:12

+0

@mish:我只能推薦你在Google上搜索Google日曆應用示例 - 我確定那裏肯定有不少。 – Squonk 2014-12-05 00:14:53