나는 ListFragment
및 단추가있는 레이아웃이 있습니다. 단추를 클릭하면 새 Buchungstag
개체가 만들어져 데이터베이스에 저장됩니다. 이제 LoaderManager
이이 변경을 감지하고 새 커서를 생성한다고 가정했습니다. 다음 ListFragment
새 개체를 표시해야하지만 아무 일도 발생하지 않습니다. 누군가 내가 틀린 곳을 말해 줄 수 있습니까? 이것은 BuchungstagFragment
을 내 조각이라고LoaderManager 및 SimpleCursorAdapter를 사용하여 ListFragment를 채우는 방법?
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.zeiterfassung);
buchungstagDAO = new BuchungstagDAO(getApplicationContext());
Button kommen = (Button) findViewById(R.id.zeit_bntKommen);
kommen.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
LogWL.e(TAG, "button clicked");
TBuchungstag tag = new TBuchungstag();
tag.setDatum(new Date());
tag.setFrueh(true);
tag.setMittag(false);
tag.setAbend(true);
tag.setNebenkosten(0.37d);
tag.setParkgebuehren(4.50d);
tag.setNebenkostenKommentar("billig");
tag.setParkgebuehrenKommentar("parkhaus");
tag.setAnwender(((WLAuToApplication) getApplication()).anwender);
tag.setReiseweg("Bochum - Muenster - Bochum");
tag.setAendDatum(new Date());
tag = buchungstagDAO.saveOrUpdate(tag);
LogWL.e(TAG, tag.getInterneId()+" saved");
}
});
}
: 이것은 내 활동에서 onCreate()는
는public class BuchungstagFragment extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> {
private BuchungstagSimpleCursorAdapter buchungstagCursorAdapter;
private Anwender anwender;
private Date syncDatum = Date.getInstance(1970, 1, 1);
private OnItemSelectedListener listener;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.zeiterf_buchungstag_fragment, container);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
buchungstagCursorAdapter = new BuchungstagSimpleCursorAdapter(getActivity());
setListAdapter(buchungstagCursorAdapter);
getLoaderManager().initLoader(0, null, this);
}
@Override
public void setArguments(Bundle args) {
super.setArguments(args);
this.anwender = (Anwender) args.get("anwender");
this.syncDatum = (Date) args.get("syncDatum");
}
private static final String[] COLUMNS = new String[] { BuchungstagTable._ID, BuchungstagTable.BUCHUNGSTAG_ID,
BuchungstagTable.FRUEH, BuchungstagTable.MITTAG, BuchungstagTable.ABEND, BuchungstagTable.NEBENKOSTEN,
BuchungstagTable.NEBENKOSTEN_KOMMENTAR, BuchungstagTable.PARKGEBUEHREN,
BuchungstagTable.PARKGEBUEHREN_KOMMENTAR, BuchungstagTable.SYNC_DATUM, BuchungstagTable.AEND_DATUM,
BuchungstagTable.UEB_DATUM, BuchungstagTable.DATUM, BuchungstagTable.ANWENDER_ID };
/*
* (non-Javadoc)
*
* @see android.app.LoaderManager.LoaderCallbacks#onCreateLoader(int,
* android.os.Bundle)
*/
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
Uri baseUri = BuchungstagTable.CONTENT_URI;
return new CursorLoader(getActivity(), baseUri, COLUMNS, BuchungstagTable.SYNC_DATUM + " = ?",
new String[] { syncDatum.toString() }, null);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
buchungstagCursorAdapter.swapCursor(cursor);
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
buchungstagCursorAdapter.swapCursor(null);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof OnItemSelectedListener) {
listener = (OnItemSelectedListener) activity;
} else {
throw new ClassCastException(activity.toString()
+ " muss BuchungstagFragment.OnItemSelectedListener implementieren!");
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
TBuchungstag tag = (TBuchungstag) buchungstagCursorAdapter.getItem(position);
Bundle tagBundle = new Bundle();
tagBundle.putSerializable("buchungstag", tag);
listener.onBuchungstagItemSelected(tagBundle);
getLoaderManager().restartLoader(0, null, this);
}
public interface OnItemSelectedListener {
public void onBuchungstagItemSelected(Bundle tagBundle);
}
}
이 내 BuchungstagSimpleCursorAdapter
입니다 : 내 ContentProvider
이있다
public class BuchungstagSimpleCursorAdapter extends SimpleCursorAdapter {
private static String[] COLUMNS = { BuchungstagTable.DATUM };
private static int[] guifelder = { R.id.zeit_buchungstagTagLabel, R.id.zeit_buchungstagDatumLabel };
private final LayoutInflater inflater;
private Context context;
public BuchungstagSimpleCursorAdapter(Context context) {
super(context, R.layout.zeiterf_buchungstag, null, COLUMNS, guifelder, 0);
inflater = LayoutInflater.from(context);
this.context = context;
}
/*
* (non-Javadoc)
*
* @see android.widget.SimpleCursorAdapter#bindView(android.view.View,
* android.content.Context, android.database.Cursor)
*/
@Override
public void bindView(View view, Context context, Cursor cur) {
Date d = new Date(cur.getLong(cur.getColumnIndex(BuchungstagTable.DATUM)));
String day = d.format("EEEE");
String date = d.format("dd.MM.yyyy");
TextView tag = (TextView) view.findViewById(R.id.zeit_buchungstagTagLabel);
tag.setHintTextColor(view.getResources().getColor(R.color.buchungstagTagColor));
tag.setText(day);
TextView datum = (TextView) view.findViewById(R.id.zeit_buchungstagDatumLabel);
datum.setText(date);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = inflater.inflate(R.layout.zeiterf_buchungstag, parent);
return v;
}
}
그의 끝에 방법. 누군가가 왜 이것이 예상대로 작동하지 않는지 설명 할 수 있습니까?