Wie Update ListView in ListFragment von FragmentActivity?

Ich verwende ein ListFragment innerhalb einer FragmentActivity zusammen mit einem SimpleCursorAdapter und einem modifizierten CursorLoader. Der modifizierte CursorLoader gibt einfach rawQueries aus – keine weiteren Änderungen.

An einem gewissen Punkt in der FragmentActivity muss ich den Daten / Cursor, der die ListView in der ListFragment speist, zurückholen.

  • Wie kann ich automatisch einen Service neu starten, auch wenn die Benutzer die Schließung beenden?
  • Tipps, um von App Inventor zu Eclipse zu wechseln
  • REST-API von einer Android-App aufrufen
  • EditText maxLines funktioniert nicht - Benutzer können noch mehr Zeilen eingeben als gesetzt
  • WallpaperManager zoomt das Bild, obwohl die Dimension mit dem Bildschirm übereinstimmt
  • Android: EventHub.removeMessages (int was = 107) wird nicht unterstützt, bevor das WebViewCore eingerichtet ist
  • Wie kann ich das machen?

    Vielen Dank im Voraus.

    Hier ist die FragmentActivity, die eine Methode im ListFragment aufruft:

    public class ActivityList extends FragmentActivity { @Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent intent) { ... processUpdateList(); } ... private void processUpdateList() { Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragmentlist); if (fragment != null) { ((FragmentList) fragment).requeryList(); } } } 

    Und hier ist das ListFragment mit der Methode, die eine Re-Abfrage einleiten, die ListView erneut laden oder neu malen soll. ListView.invalidate () hat nicht geholfen – es hat die gezeigten Daten nicht geändert.

     public class FragmentList extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor> { private SimpleCursorAdapter adapter; private Context context; private ListView listView; public void requeryList() { // listView.invalidate(); didn't re-query // TODO: How??? } @Override public void onActivityCreated(final Bundle bundle) { super.onActivityCreated(bundle); context = getActivity().getApplicationContext(); listView = getListView(); getActivity().getSupportLoaderManager().initLoader(MyConstants.LDR_TABLE1LIST, null, this); adapter = new SimpleCursorAdapter(context, R.layout.fragmentlist_row, null, new String[] { Table1.DESCRIPTION }, new int[] { R.id.fragmentlist_row_description }, CursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER); setListAdapter(adapter); setListShown(false); listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); } @Override public Loader<Cursor> onCreateLoader(final int id, final Bundle bundle) { MyCursorLoader loader = null; switch (id) { case MyConstants.LDR_TABLE1LIST: loader = new MyCursorLoader(context, MySQLiteOpenHelper.TABLE1_FETCH, null); break; } return loader; } @Override public void onLoaderReset(final Loader<Cursor> loader) { adapter.swapCursor(null); } @Override public void onLoadFinished(final Loader<Cursor> loader, final Cursor cursor) { adapter.swapCursor(cursor); setListShown(true); } } 

  • SoundPool: Fehler beim Erstellen von AudioTrack
  • Sharing Link auf WhatsApp von mobilen Website (nicht Anwendung) für Android
  • Unsigned APK kann nicht installiert werden
  • Wie zitiere ich Fragment aus Fragment?
  • Mit listpreference und bekommen die Taste funktioniert aber keine OK-Taste
  • Android: Muss man den Mikrofoneingang aufnehmen
  • 3 Solutions collect form web for “Wie Update ListView in ListFragment von FragmentActivity?”

    Versuchen Sie, die Methode restartLoader(MyConstants.LDR_TABLE1LIST, null, this); Der LoaderManager hat gerade in Ihrer requeryList() Methode angegeben.

    Du solltest nicht notifyDataSetChanged() anrufen: der Loader kümmert sich darum für dich. Dein Code sieht ziemlich gut aus. Ich verstehe nicht sofort etwas falsch Als Referenz, schlage ich vor, Sie vergleichen Ihren Code zu com.example.android.apis.app/LoaderThrottle.java in der API Demos Beispiel App.

    Loader werden nach Möglichkeit einen Cursor wieder verwenden. Wenn Sie einen Loader für einen Satz von Daten anfordern, der sich nicht geändert hat, ist der Loader schlau und gibt den Cursor über onLoadFinished zurück, ohne irgendeine zusätzliche Arbeit zu machen, nicht einmal die Position des Cursors auf -1 zu setzen.

    Versuchen Sie, Cursor.moveToPosition(-1) in onLoadFinished() , um dieses Problem zu onLoadFinished() .

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.