0

Ich habe 2 Fragmente in der MainActivity meiner App. Ein Fragment liest Daten vom Bluetooth-Gerät und erstellt eine Datenbank. Andere werden diese Daten anzeigen (in BarGraph). Es funktioniert gut. Der BarGraph wird jedoch nicht dynamisch aktualisiert, wenn neue Daten eintreffen. Ich implementierte eine PageChangeListener, so dass, wenn der Benutzer Änderungen an der BarGraph Fragment, sollte es aktualisiert werden wie folgtEin Fragment aktualisieren, wenn die Seite ausgewählt wurde

mViewPager.addOnPageChangeListener(new OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      // TODO Auto-generated method stub 
       mSectionsPagerAdapter.instantiateItem(mViewPager, position); 
       if(position == 1){ 
        AnalyticsFragment.newInstance(position).updateChart(getApplicationContext()); 
        //af = new AnalyticsFragment(); 
        //af.updateChart(); 
       } 
     }.. 

AnalyticsFragment (BarGrapg one) hat eine Methode updateChart, die meine BarGraph aktualisiert durch Lesen von der Datenbank

public void updateChart(Context context){ 
     //Getting weight and time from db 
     List<String> list = new ArrayList<String>(); 
     if(context == null) //This is because I get NullPointerError here 
      return; 
     FeedReaderDbHelper mDbHelper = new FeedReaderDbHelper(context); 
     list = mDbHelper.getAllWeight(); 
     if (list.isEmpty()){ 
      Log.w(tag, "List of weights is empty!!"); 
      return; 
     } 
     drawgraph(list); 
    } 

Aber es wird nicht aktualisiert, wenn neue Daten kommen. Mache ich etwas falsch?

P.S. Dies ist sicherlich keine doppelte Frage. Ich habe alle gleichartigen durchgesehen und fand sie nicht hilfreich. Ich erhalte diese irritierenden Fehler immer

java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference

Antwort

0

dies nicht der Fall ist, wie Sie Zugriff auf Ihre Fragment die attached auf Ihre Adapter ist, zugreifen und diese zu aktualisieren, Sie Code unten verwenden könnte stattdessen newInstance schaffen jedes Mal, wenn Sie scrollen.

AnalyticsFragment fragment = (AnalyticsFragment) viewPager.getAdapter().instantiateItem(viewPager,0/* position of your fragment */); 

jetzt konnte man sich

fragment.updateChart(); 

tun einen Gefallen tun und geben nie Context von Ihrem Activity zu Ihrem Fragment.

die context aus dem Verfahren entfernen und params getContext(); der Fragment stattdessen als contextparam verwenden nicht mehr benötigt wird.

+0

Vielen Dank. Es hat als Charme funktioniert. –