1

Я пытаюсь добавить GraphView в свое настраиваемое диалоговое всплывающее окно, но каждый раз я получаю исключение NullPointerException.Использование Android GraphView в настраиваемом диалоговом окне в фрагменте

Я тестировал всплывающее окно GraphView и Dialog отдельно, поэтому я знаю, что они оба правильные. Я просто не могу реализовать GraphView в диалоговом окне. Как указано в заголовке, все это находится в фрагменте,

Så здесь код для диалога и graphview:

public void showStatisticWindow(Exercise exercise, ViewGroup cont) { 
// Get the graph 
GraphView graph = (GraphView) v.findViewById(R.id.graph_exercise_statistic); 

BarGraphSeries<DataPoint> series = new BarGraphSeries<DataPoint>(new DataPoint[] { 
     new DataPoint(0, -2), 
     new DataPoint(1, 5), 
     new DataPoint(2, 3), 
     new DataPoint(3, 2), 
     new DataPoint(4, 6) 
}); 
graph.addSeries(series); 

// Create the dialog/popup 
final View popupExerciseStatisticView = View.inflate(cont.getContext(), R.layout.popup_statistic_exercise, null); 
final AlertDialog.Builder builder = new AlertDialog.Builder(cont.getContext()); 
final AlertDialog alert = builder.create(); 

alert.setTitle("Create the program"); 
alert.setView(popupExerciseStatisticView); 
builder.setNegativeButton("Close", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     alert.dismiss(); 
    } }); 
alert.show(); 

} 

А вот расположение XML для диалога:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    android:id="@+id/popup_statistic_exercise"> 

    <com.jjoe64.graphview.GraphView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/graph_exercise_statistic" /> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/graph_relativelayout"> 

     <TextView 
      android:layout_width="80dp" 
      android:layout_height="wrap_content" 
      android:text="Sets" 
      android:id="@+id/sets_names_headline" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:background="@color/blue_bg_inputField" 
      android:textAlignment="viewStart" 
      android:padding="10dp" /> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" 
      android:layout_below="@+id/sets_names_headline" 
      android:layout_alignLeft="@+id/sets_names_headline" 
      android:layout_alignStart="@+id/sets_names_headline" 
      android:background="@color/blue_bg_inputField" 
      android:paddingLeft="10dp" 
      android:paddingTop="3dp" 
      android:paddingBottom="3dp" 
      android:id="@+id/sets_names_list"></LinearLayout> 

    </RelativeLayout> 

</RelativeLayout> 

И, наконец, вот выход из консоли:

java.lang.NullPointerException 
      at com.mobileplatformexam.fragments.StatisticExercisesFragment.showStatisticWindow(StatisticExercisesFragment.java:153) 
      at com.mobileplatformexam.fragments.StatisticExercisesFragment$1.onTouch(StatisticExercisesFragment.java:87) 
      at android.view.View.dispatchTouchEvent(View.java:5553) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1957) 
      at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1684) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2038) 
      at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1396) 
      at android.app.Activity.dispatchTouchEvent(Activity.java:2535) 
      at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1986) 
      at android.view.View.dispatchPointerEvent(View.java:5738) 
      at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:2900) 
      at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2476) 
      at android.view.ViewRootImpl.processInputEvents(ViewRootImpl.java:849) 
      at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:863) 
      at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2452) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4476) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583) 
      at dalvik.system.NativeStart.main(Native Method) 

Код в строке 153:

graph.addSeries(series); 

Я надеюсь, что у кого-то есть представление о том, что может быть неправильно. Если вам нужна дополнительная информация, просто спросите.

Любая помощь будет принята с благодарностью.

+0

Что такое код в строке 153 –

+0

Когда был инициализирован 'v'? –

+0

в onCreateView (LayoutInflater inflater, контейнер ViewGroup, Bundle savedInstanceState), который вызывает метод в моем вопросе. Но я могу легко создать собственный диалог без графика. Когда я добавляю его в диалог, все идет не так. – Langkiller

ответ

0

Прошло около года с тех пор, как задан вопрос, но я оставлю свой ответ на случай, если кому-то это понадобится.

В соответствии с вашим xml-файлом элемент GraphView, который вы хотите, является элементом схемы popup_statistic_exercise. Таким образом, вам нужно получить объект GraphView после вашего надувания View диалогового окна, в котором используется макет popup_statistic_exercise.

// Create the dialog/popup 
final View popupExerciseStatisticView = View.inflate(cont.getContext(), R.layout.popup_statistic_exercise, null); 

// Get the graph 
GraphView graph = (GraphView) popupExerciseStatisticView.findViewById(R.id.graph_exercise_statistic); 

BarGraphSeries<DataPoint> series = new BarGraphSeries<DataPoint>(new DataPoint[] { 
     new DataPoint(0, -2), 
     new DataPoint(1, 5), 
     new DataPoint(2, 3), 
     new DataPoint(3, 2), 
     new DataPoint(4, 6) 
}); 
graph.addSeries(series); 

final AlertDialog.Builder builder = new AlertDialog.Builder(cont.getContext()); 
final AlertDialog alert = builder.create(); 

alert.setTitle("Create the program"); 
alert.setView(popupExerciseStatisticView); 
builder.setNegativeButton("Close", new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int which) { 
     alert.dismiss(); 
    } }); 
alert.show(); 
Смежные вопросы