SimpleCursorAdapter可以把我们从Array或数据库中取出的数据绑定的ListView或其他的组件,这个很好用,但有时候有些View,SimpleCursorAdapter并不能直接绑定,需要自己去实现它的setViewBinder方法,下面是我利用SimpleCursorAdapter绑定RatingBar的例子:

SimpleCursorAdapter timeItems = new SimpleCursorAdapter(this, 
R.layout.timeitem_row, timeItemsCursor, from, to);
timeItems.setViewBinder(new SimpleCursorAdapter.ViewBinder(){

@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {
int rateIndex = cursor.getColumnIndex("rate");
if(columnIndex == rateIndex)
{
RatingBar ratingBar = (RatingBar)view;
ratingBar.setRating(cursor.getInt(rateIndex));
return true;
}
return false;
}
});

  1. 在Android中编写Service,需要继承android.app.Service,覆盖其onCreate()和onStart(Intent intent, int startId)方法即可,onCreate方法只在service创建时调用,onStart方法每次都会调用。

  2. 在Service中不能直接访问数据库,只能通过ContentResolver访问,如果访问自己的数据,需要继承ContentProvider并实现其方法,才能被ContentResolver访问,以下使用ContentResolver的方法:

    mCursor = getContentResolver().query( 
    Uri.withAppendedPath(
    TimeAccount.EVENT_TYPE_CONTENT_URI, "/" + pid),
    new String[] { "name" }, null, null, null);
阅读全文 »

在Android中创建自己的VIEW只要继承android.view.View类,然后在onDraw方法中使用canvas画自己所需要的东东就可以了。当然你还需要做一些实际处理,比如对用户点击的处理,向前或向后滚动的处理等。

以下是我创建的CalendarView中,部分显示日历的代码:

public CalendarView(Context context) {
        super(context);

        calendarBrowse = (CalendarBrowse) context;

        setFocusable(true);
        setFocusableInTouchMode(true);

        cPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        cPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        cPaint.setColor(Color.RED);
        cPaint.setTextSize(20f);

        tPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        tPaint.setStyle(Paint.Style.FILL_AND_STROKE);
        tPaint.setColor(Color.WHITE);
        tPaint.setTextSize(20f);

        setBackgroundColor(getResources().getColor(R.color.background));

        mGestureDetector = new GestureDetector(
                new GestureDetector.SimpleOnGestureListener() {

                    @Override
                    public boolean onFling(MotionEvent e1, MotionEvent e2,
                            float velocityX, float velocityY) {

                        if (e1.getX() > e2.getX()) {
                            cal.add(Calendar.MONTH, 1);
                            CalendarView.this.invalidate();
                        }

                        if (e1.getX() < e2.getX()) {
                            cal.add(Calendar.MONTH, -1);
                            CalendarView.this.invalidate();
                        }

                        return true;

                    }

                    @Override
                    public boolean onSingleTapUp(MotionEvent e) {
                        day = getDay(e.getX(), e.getY());
                        if (day != INVALID_POSITION) {
                            calendarBrowse.showTimeItemList(year, month, day);
                        }
                        return true;
                    }

                });
    }

GestureDetector类是用于对手势操作的处理,它可以截取你对屏幕的单击,长按,
向前向后滚动等操作,这个功能在Android的框架中封装的很好,使用起来很舒服。

我的豆瓣是一个Android豆瓣客户端

功能如下:

1.查看豆瓣新书,豆瓣评论(全文);

2.查看和编辑我读,我看,我看,我评,我的日记,我的资料等信息;

3.图书搜索,电影搜索,音乐搜索;

Email: chenyangcun@gmail.com

开源代码:http://code.taobao.org/project/view/484/

源码编译说明:修改NetUtil.java里的apiKey和secret两个变量,改成你自己申请的,否则无法登陆。

阅读全文 »

  1. DbAdapter,作为content provider,通过继承SQLiteOpenHelper辅助实现
      private static class DatabaseHelper extends SQLiteOpenHelper {

    DatabaseHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
    db.execSQL(DATABASE_CREATE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
    + newVersion + ", which will destroy all old data");
    db.execSQL("DROP TABLE IF EXISTS notes");
    onCreate(db);
    }
    }
阅读全文 »