package jp.mydns.sys1yagi.android.activeandroidsample.todo; import java.text.SimpleDateFormat; import java.util.Date; import jp.mydns.sys1yagi.android.activeandroidsample.R; import jp.mydns.sys1yagi.android.activeandroidsample.model.Todo; 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; import com.activeandroid.ActiveAndroid; 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 SimpleDateFormat mFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm"); public TodoCursorAdapter(Fragment fragment) { super(fragment.getActivity(), null, false); mInflator = (LayoutInflater) fragment.getActivity().getSystemService( Context.LAYOUT_INFLATER_SERVICE); mFragment = fragment; } @Override public void bindView(View paramView, Context paramContext, Cursor paramCursor) { Todo todo = new Todo(); todo.loadFromCursor(paramCursor); 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(TodoDaoHelper.STATUS_END); todo.setEndDate(new Date()); } else { todo.setStatus(TodoDaoHelper.STATUS_NEW); todo.setEndDate(null); } todo.save(); mFragment.getLoaderManager().restartLoader( TodoFragment.TODO_LOAD_ID, null, This()); } }); holder.marked.setChecked(todo.getStatus() == TodoDaoHelper.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 orderBy = Todo.COLUMN_ADD_DATE + " DESC"; return new TodoLoader( mFragment.getActivity(), ActiveAndroid.getDatabase(), Todo.TABLENAME, null, Todo.COLUMN_STATUS + "!=?", new String[] { Integer.toString(TodoDaoHelper.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); } }