2014-12-14 8 views
5

Sto lavorando a un progetto Android e sto cercando di implementare una libreria denominata MPAndroidChart da https://github.com/PhilJay/MPAndroidChart.Utilizzo di MPChartLibrary all'interno di un frammento

Sto cercando di implementarlo in un frammento ma continuo a ricevere un errore e non riesco a capire perché.

Di seguito è la mia attività.

public class MainActivity extends ActionBarActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
     Fragment chartFragment = new ChartFragment(); 
     transaction.replace(R.id.fragmentContainer, chartFragment); 
     transaction.commit(); 
    } 
} 

Qui di seguito è la mia attività Schema

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <include layout="@layout/toolbar" /> 
    <FrameLayout android:id="@+id/fragmentContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</LinearLayout> 

Qui di seguito è la mia classe Frammento

public class ChartFragment extends Fragment 
{ 
    private LineChart mChart; 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.graph, container, false); 



     return v; 
    } 
} 

E sotto è il layout per il frammento

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <com.github.mikephil.charting.charts.LineChart 
     android:id="@+id/lineChart1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</FrameLayout> 

Al momento si blocca quando tenta di gonfiarsi la vista nella mia funzione OnCreateView.

L'errore che sto ottenendo è:

java.lang.RuntimeException: Impossibile avviare l'attività ComponentInfo {com.MyCompany.ChartTest/com.MyCompany.ChartTest.MainActivity}: android.view. InflateException: Binary file XML linea # 5: Errore gonfiaggio classe com.github.mikephil.charting.charts.LineChart

Grazie per qualsiasi aiuto che potete fornire.

+0

Qualcuno chiamato zio-Leo ha avuto un simile eccezione vedere https://github.com/PhilJay/MPAndroidChart/issues/26; Pulisci la libreria e vedi se ci sono diverse versioni di android-support-v4.jar nell'elenco delle dipendenze –

+0

Grazie, ho controllato che il supporto lib sta usando la versione più recente e non ce ne sono altri inclusi, e ho cancellato il mio le app creano la cartella ei moduli della libreria creano la cartella e la ricostruiscono, ma continuano a ricevere lo stesso errore – Boardy

+0

Cosa succede se provi senza xml? Sei in grado di fare setContextView (nuovo LineChart (questo)); o qualcosa di simile? – Breadbin

risposta

0

Prova questa, può aiutare:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <com.github.mikephil.charting.charts.LineChart 
     android:id="@+id/lineChart1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</FrameLayout> 

La linea:

xmlns:app="http://schemas.android.com/apk/res-auto" 

è importante.

Spero che aiuti.

+0

Grazie, ma purtroppo nessuna gioia, ottenendo sempre la stessa eccezione – Boardy

1

Onestamente non vedo nulla che possa essere sbagliato.

L'unica differenza che vedo tra il Fragments utilizzato nella example project è che usano wrap_content anziché match_parent per la larghezza e l'altezza del grafico.

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <com.github.mikephil.charting.charts.LineChart 
     android:id="@+id/lineChart1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</FrameLayout> 
+0

Grazie, ho provato a passare da '' match_parent'' a '' wrap_content'', ma sto ancora ottenendo lo stesso crash – Boardy

+0

Allright. Stai usando altre librerie nel tuo progetto? –

+0

Ho una mia libreria personale che uso per tutti i miei progetti, la libreria di supporto e la libreria di supporto appcompat – Boardy

2

Sono riuscito a confermare dove si trova il problema.

Ho il tema delle mie app definito in una libreria che viene utilizzata dalle mie varie altre app, ma per qualche motivo quando si fa riferimento al tema dalla libreria quando si utilizza MPAndroidChartLib ottengo questa eccezione. Se copio e incollo lo stile del tema dalla mia libreria e lo applico al mio file degli stili e faccio riferimento a questo, invece funziona perfettamente.

+0

Ho rimosso tutti i tipi di risorse dalla libreria e pubblicherò le modifiche in la prossima versione. Forse questo risolverà il problema. –

+0

Grazie, non vedo l'ora di provarlo – Boardy

0

Ho faticato con questo problema e finalmente ho trovato una soluzione funzionante.

L'indizio è un messaggio di errore sulla preview disegno del frammento grafico:

Le seguenti classi non possono essere istanziati:
charting.charts.LineChart

Dettagli eccezione
java .lang.ClassNotFoundException:
com.nineoldandroids.animation.ValueAnimator $ AnimatorUpdateListener

Aggiunta com.nineoldandroids:library:2.4.+ in file build.gradle del mio progetto Risolto il problema:

dependencies { 
compile 'com.android.support:support-v4:19.1.0' 
compile 'joda-time:joda-time:2.5' 
compile 'com.nineoldandroids:library:2.4.+' 
compile files('libs/MPChart.jar') 
} 
0

Aggiunta di righe di seguito in onCreate() ha fatto il trucco per me

getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
Problemi correlati