2012-08-14 7 views

Répondre

8

main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="vertical" > 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Introducing ICS Calendar" 
android:gravity="center" 
android:padding="10dip"/> 
<TextView 
android:id="@+id/data" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:gravity="center" 
android:padding="10dip"/> 
<LinearLayout 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="horizontal" 
android:gravity="center" > 
<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/previous" 
android:text="Prev" 
android:padding="10dip"/> 
<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/next" 
android:text="Next" 
android:padding="10dip"/> 
</LinearLayout> 
</LinearLayout> 

Main.java

import java.text.Format; 
import android.app.Activity; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.CalendarContract; 
import android.text.format.DateFormat; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 

public class Main extends Activity implements OnClickListener{ 

private Cursor mCursor = null; 
private static final String[] COLS = new String[] 
{ CalendarContract.Events.TITLE, CalendarContract.Events.DTSTART}; 
} 

Maintenant, nous devons passer outre la méthode de créer. Portez une attention particulière à la façon dont nous remplissons le curseur de la base de données. C'est ici que nous avons besoin de notre constante COLS précédemment définie. Vous remarquerez également que, une fois le curseur de la base de données initialisé et les callbacks du gestionnaire de clics configurés, nous continuons et invoquons manuellement le gestionnaire on click. Ce raccourci nous permet de remplir initialement notre interface utilisateur sans avoir à répéter le code.

Main.java

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
mCursor = getContentResolver().query(
CalendarContract.Events.CONTENT_URI, COLS, null, null, null); 
mCursor.moveToFirst(); 
Button b = (Button)findViewById(R.id.next); 
b.setOnClickListener(this); 
b = (Button)findViewById(R.id.previous); 
b.setOnClickListener(this); 
onClick(findViewById(R.id.previous)); 
} 

Dans notre rappel, nous allons manipuler le curseur sur l'entrée correcte dans la base de données et mettre à jour l'interface utilisateur.

@Override 
public void onClick(View v) { 
TextView tv = (TextView)findViewById(R.id.data); 
String title = "N/A"; 
Long start = 0L; 
switch(v.getId()) { 
case R.id.next: 
if(!mCursor.isLast()) mCursor.moveToNext(); 
break; 
case R.id.previous: 
if(!mCursor.isFirst()) mCursor.moveToPrevious(); 
break; 
} 
Format df = DateFormat.getDateFormat(this); 
Format tf = DateFormat.getTimeFormat(this); 
try { 
title = mCursor.getString(0); 
start = mCursor.getLong(1); 
} catch (Exception e) { 
//ignore 
} 
tv.setText(title+" on "+df.format(start)+" at "+tf.format(start)); 
} 

permission:

<uses-permission android:name="android.permission.READ_CALENDAR"/> 
+0

Je reçois une erreur sur CONTENT_URI. – vascobnunes

+0

Ok, résolu avec le @TargetApi (14). Mais maintenant, je n'ai pas de calendrier sur le simulateur pour savoir si cela fonctionne ... :) – vascobnunes

+0

Excellent, est-il possible de le faire ressembler à un calendrier? Actuellement, il ne fait que récupérer les événements. –