CursorLoader в Фрагмент


Я не уверен, как правильно реализовать простой CursorLoader что загружает данные непосредственно из базы данных SQLite и отобразит его в ListView в Fragmentкак большинство примеров, которые я нашел, требуют создания ContentProvider.

Код у меня на данный момент, кажется, работает, как ожидалось, но я хочу убедиться, что нет никаких скрытых сюрпризов, которые ждут к краху моего приложения.

public class TodoFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {

    private TodoAdapter mAdapter = null;

    public TodoFragment() {
        // Required empty public constructor
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getLoaderManager().initLoader(0, null, this);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.todo_fragment, container, false);

        mAdapter = new TodoAdapter(getActivity(), null, 0);

        ListView listView = ((ListView) view.findViewById(R.id.todo_listview));
        listView.setAdapter(mAdapter);

        return view;
    }

    /**
     * My custom CursorLoader for Todo-items
     */
    private static class TodoCursorLoader extends CursorLoader {
        public TodoCursorLoader(Context context) {
            super(context);
        }

        @Override
        public Cursor loadInBackground() {
            // This method returns a Cursor to all the items in the DB table
            return MyApplication.getDbHelper().getAllTodoItems();
        }
    }



    /**
     * LoaderManager.LoaderCallbacks implementation
     */
    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new TodoCursorLoader(getActivity());
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
        mAdapter.swapCursor(cursor);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.swapCursor(null);
    }
    /** -- **/
}

Фрагмент могут быть скрыты и показаны, и INSERT/UPDATE/DELETE может быть выполнена только на базе, а TodoFragment не видно (с другой Fragment).

Это выглядеть правильно?



Комментарии