package jp.mydns.sys1yagi.android.greendaosample.todo; import java.text.SimpleDateFormat; import java.util.Date; import jp.mydns.sys1yagi.android.greendaosample.DaoSession; import jp.mydns.sys1yagi.android.greendaosample.R; import jp.mydns.sys1yagi.android.greendaosample.Todo; import jp.mydns.sys1yagi.android.greendaosample.TodoDao; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.LoaderManager; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.TextView; class TodoCursorAdapter extends CursorAdapter implements LoaderManager.LoaderCallbacks<Cursor> { private TodoCursorAdapter This() { return this; } private static class ViewHolder { TextView todo; TextView addDate; CheckBox marked; } private LayoutInflater mInflator; private Fragment mFragment; private DaoSession mDaoSession; private SimpleDateFormat mFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm"); public TodoCursorAdapter(Fragment fragment, DaoSession daoSession) { super(fragment.getActivity(), null, false); mDaoSession = daoSession; mInflator = (LayoutInflater) fragment.getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE); mFragment = fragment; } @Override public void bindView(View paramView, Context paramContext, Cursor paramCursor) { Todo todo = mDaoSession.getTodoDao().readEntity(paramCursor, 0); if (todo != null) { ViewHolder holder = (ViewHolder) paramView.getTag(); holder.todo.setText(todo.getTodo()); holder.addDate.setText(mFormat.format(todo.getAddDate())); holder.marked.setTag(todo); holder.marked .setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Todo todo = (Todo) buttonView.getTag(); if (isChecked) { todo.setStatus(TodoDaoOpenHelper.STATUS_END); todo.setEndDate(new Date()); } else { todo.setStatus(TodoDaoOpenHelper.STATUS_NEW); todo.setEndDate(null); } mDaoSession.getTodoDao().update(todo); mFragment.getLoaderManager().restartLoader( TodoFragment.TODO_LOAD_ID, null, This()); } }); holder.marked .setChecked(todo.getStatus() == TodoDaoOpenHelper.STATUS_END); } } @Override public View newView(Context paramContext, Cursor paramCursor, ViewGroup paramViewGroup) { View view = mInflator.inflate(R.layout.todo_item, null); ViewHolder holder = new ViewHolder(); holder.todo = (TextView) view.findViewById(R.id.todo); holder.addDate = (TextView) view.findViewById(R.id.add_date); holder.marked = (CheckBox) view.findViewById(R.id.marked); view.setTag(holder); return view; } @Override public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) { String addDateColumn = TodoDao.Properties.AddDate.columnName; String orderBy = addDateColumn + " DESC"; return new TodoLoader(mFragment.getActivity(), mDaoSession.getDatabase(), TodoDao.TABLENAME, mDaoSession .getTodoDao().getAllColumns(), TodoDao.Properties.Status.columnName + "!=?", new String[] { Integer .toString(TodoDaoOpenHelper.STATUS_ARCHIVE) }, orderBy); } @Override public void onLoaderReset(Loader<Cursor> arg0) { this.swapCursor(null); } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { this.swapCursor(cursor); } }