my の各アイテムには、名前と 2 つの数字のSherlockListFragment
3 つの s が含まれています。データは、次の構造を持つ私のデータベースTextView
のテーブルから取得されます。objective
CREATE TABLE objective (
_id INTEGER PRIMARY KEY,
id_project INTEGER NOT NULL,
activity_code INTEGER NOT NULL,
day_duration INTEGER NOT NULL,
week_frequency INTEGER NOT NULL,
FOREIGN KEY(id_project) REFERENCES project(id_project)
);
さらに、カーソルからのリストへの入力は、ローダーを使用して行う必要があることを読みました (特にデータベースを使用する場合は、操作が非常に遅くなる可能性があるため)。ここで stackoverflowSimpleCursorLoader
でクラスを見つけましたが、データをフィールドに直接マップします。
ご覧のとおり、私のobjective
テーブルにはactivity_code
. したがって、それを文字列に置き換えたいと思います(すべてのアクティビティコードをリストし、それぞれに文字列リソース識別子を返す Enum があります)。
sに表示される前にデータを操作する方法を知っていますTextView
か?
これが私のSherlockListFragment
public class ObjectivesDisplayFragment extends SherlockListFragment implements LoaderManager.LoaderCallbacks<Cursor>
{
private Activity activity;
private SimpleCursorAdapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
return inflater.inflate(R.layout.objectives_display, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
activity = getActivity();
String[] columns = new String[] { "activity_code", "day_duration", "week_frequency" };
int[] to = new int[] { R.id.activityName, R.id.objectiveDuration, R.id.objectiveFrequency };
getLoaderManager().initLoader(0x01, null, this);
adapter = new SimpleCursorAdapter(activity.getApplicationContext(), R.layout.objective_row, null, columns, to, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER);
setListAdapter(adapter);
}
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
return new SimpleCursorLoader(activity) {
@Override
public Cursor loadInBackground() {
DatabaseHelper dbHelper = DatabaseHelper.getInstance(activity);
String query = "SELECT _id, activity_code, day_duration, week_frequency FROM objective WHERE id_project = ?";
String[] args = new String[] { "1" }; // projectId
Cursor results = dbHelper.getReadableDatabase().rawQuery(query, args);
return results;
}
};
}
public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) {
adapter.swapCursor(cursor);
}
public void onLoaderReset(Loader<Cursor> arg0) {
adapter.swapCursor(null);
}
}
EDIT:SimpleCursorLoader> loadInBackgroundでカーソルとデータベースを閉じる必要はありませんよね?そうしないと、データを読み取ることができませんでした。閉鎖操作は自動的に処理されますか、それとも他の場所で自分で行う必要がありますか?