2012-08-14 60 views

回答

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}; 
} 

现在我们需要重写的创建方法。请特别注意我们如何填充数据库游标。这是我们需要我们以前定义的COLS常量的地方。您还会注意到,在数据库游标初始化并设置了click处理程序回调后,我们继续并手动调用on click处理程序。这个快捷方式使我们能够在不必重复代码的情况下填写我们的UI。

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)); 
} 

在我们的回调,我们将操控光标到数据库中的正确条目,并更新用户界面。

@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)); 
} 

权限:

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

我在CONTENT_URI上收到错误消息。 – vascobnunes 2012-11-13 11:40:51

+0

好的,用@TargetApi(14)解决了这个问题。但现在我没有在模拟器上的日历知道这是否工作... :) – vascobnunes 2012-11-13 12:18:41

+0

非常好,有什么办法让它看起来像一个日历?目前它只是提取事件。 – 2013-01-20 17:36:30