Вопрос: Использование MPChartLibrary внутри фрагмента


Я работаю над проектом Android, и я пытаюсь реализовать библиотеку под названием MPAndroidChart из https://github.com/PhilJay/MPAndroidChart ,

Я пытаюсь реализовать его в фрагменте, но я все время получаю сообщение об ошибке, и я не понимаю, почему.

Ниже моя деятельность.

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();
    }
}

Ниже приведен макет моей деятельности

<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>

Ниже мой класс фрагментов

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;
    }
}

И ниже - макет для фрагмента

<?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>

В настоящий момент он падает, когда он пытается раздуть представление в моей функции OnCreateView.

Ошибка, которую я получаю:

java.lang.RuntimeException: невозможно запустить активность   ComponentInfo {com.MyCompany.ChartTest / com.MyCompany.ChartTest.MainActivity}:   android.view.InflateException: двоичная строка XML-файла # 5: ошибка   раздувание класса com.github.mikephil.charting.charts.LineChart

Спасибо за любую помощь, которую вы можете предоставить.


5


источник


Ответы:


Мне удалось подтвердить, где проблема.

У меня есть тема моих приложений, определенная в библиотеке, которая используется другими моими приложениями, но по какой-то причине, ссылаясь на тему из библиотеки при использовании MPAndroidChartLib, я получаю это исключение. Если я скопирую и вставлю стиль темы из своей Библиотеки, и это в мой собственный файл стилей приложений и ссылаюсь на это, то он отлично работает.


2



Я честно не вижу ничего, что могло бы быть неправильным.

Единственное различие, которое я вижу между Fragments используется в пример проекта  заключается в том, что они используют wrap_content вместо match_parent для ширины и высоты диаграммы.

<?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>

1



Попробуйте это, это может помочь:

<?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>

Линия:

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

это важно.

Я надеюсь, что это помогает.


0



Я боролся с этой точной проблемой и, наконец, нашел рабочее решение.

Ключ был сообщением об ошибке в предварительном просмотре фрагмента диаграммы:

Следующие классы не могли быть созданы:   
 charting.charts.LineChart   

  Сведения об исключении
 java.lang.ClassNotFoundException:   
 com.nineoldandroids.animation.ValueAnimator $ AnimatorUpdateListener

Добавление com.nineoldandroids:library:2.4.+ в файл build.gradle моего проекта исправлена ​​проблема:

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



Добавление строк ниже в onCreate () сделал трюк для меня

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

0