2014-12-01 4 views
1

Я запускаю деятельность, которая содержит два фрагмента. Первый фрагмент работает отлично, но второй вызывает исключение inflateException, и я не уверен, почему. Я знаю, что это второй фрагмент, потому что, когда я вырезал его из XML-файла активности, программа работает без ошибок.android - inflaterException in fragment

Я разместил ниже код для фрагмента, его XML-файл и текст logcat. Любая помощь будет высоко оценена.

Фрагмент:

package com.example.chris.drawingtest; 

import android.app.Activity; 
import android.app.Fragment; 
import android.content.DialogInterface; 
import android.nfc.Tag; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageButton; 

import com.example.chris.drawingtest.R; 

/** 
* Created by Chris on 11/28/2014. 
*/ 
public class ToolbarFragment extends Fragment { 

    ToolSelectionListener mCallback; 

    public interface ToolSelectionListener { 
     public void sendNewValue(int newValue); 
    } 

    public void clicked(ImageButton imageButton) { 
     mCallback.sendNewValue(imageButton.getId()); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     Log.d("Toolbar Inflation", "Inflating ToolbarFragment..."); 
     return inflater.inflate(R.layout.fragment_toolbar, container, false); 
    } 

    private ImageButton pencilButton = (ImageButton) getActivity().findViewById(R.id.pencil); 
    private ImageButton eraserButton = (ImageButton) getActivity().findViewById(R.id.eraser); 

} 

Фрагмент:

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="40dp" 
    android:layout_gravity="bottom|left" 
    android:orientation="horizontal" 
    > 

    <ImageButton 
     android:id="@+id/pencil" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_gravity="left" 
     android:background="@drawable/pencil" 
     /> 

    <ImageButton 
     android:id="@+id/eraser" 
     android:layout_width="40dp" 
     android:layout_height="40dp" 
     android:layout_gravity="center" 
     android:background="@drawable/eraser" 
     /> 

</LinearLayout> 

Logcat:

12-01 07:49:27.788 7171-7171/com.example.chris.drawingtest D/dalvikvm﹕ Late-enabling CheckJNI 
12-01 07:49:27.828 7171-7171/com.example.chris.drawingtest W/ActivityThread﹕ Application com.example.chris.drawingtest is waiting for the debugger on port 8100... 
12-01 07:49:27.838 7171-7171/com.example.chris.drawingtest I/System.out﹕ Sending WAIT chunk 
12-01 07:49:27.838 7171-7177/com.example.chris.drawingtest I/dalvikvm﹕ Debugger is active 
12-01 07:49:28.038 7171-7171/com.example.chris.drawingtest I/System.out﹕ Debugger has connected 
12-01 07:49:28.038 7171-7171/com.example.chris.drawingtest I/System.out﹕ waiting for debugger to settle... 
12-01 07:49:28.238 7171-7171/com.example.chris.drawingtest I/System.out﹕ waiting for debugger to settle... 
12-01 07:49:28.438 7171-7171/com.example.chris.drawingtest I/System.out﹕ waiting for debugger to settle... 
12-01 07:49:28.649 7171-7171/com.example.chris.drawingtest I/System.out﹕ waiting for debugger to settle... 
12-01 07:49:28.839 7171-7171/com.example.chris.drawingtest I/System.out﹕ waiting for debugger to settle... 
12-01 07:49:29.049 7171-7171/com.example.chris.drawingtest I/System.out﹕ waiting for debugger to settle... 
12-01 07:49:29.249 7171-7171/com.example.chris.drawingtest I/System.out﹕ waiting for debugger to settle... 
12-01 07:49:29.449 7171-7171/com.example.chris.drawingtest I/System.out﹕ debugger has settled (1410) 
12-01 07:49:29.580 7171-7171/com.example.chris.drawingtest D/AndroidRuntime﹕ Shutting down VM 
12-01 07:49:29.580 7171-7171/com.example.chris.drawingtest W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x4158dba8) 
12-01 07:49:29.600 7171-7171/com.example.chris.drawingtest E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.chris.drawingtest, PID: 7171 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.chris.drawingtest/com.example.chris.drawingtest.DrawingActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class fragment 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184) 
      at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
      at android.app.ActivityThread.access$800(ActivityThread.java:135) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
      at android.os.Handler.dispatchMessage(Handler.java:102) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5001) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
      at dalvik.system.NativeStart.main(Native Method) 
    Caused by: android.view.InflateException: Binary XML file line #21: Error inflating class fragment 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
      at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) 
      at android.app.Activity.setContentView(Activity.java:1929) 
      at com.example.chris.drawingtest.DrawingActivity.onCreate(DrawingActivity.java:18) 
      at android.app.Activity.performCreate(Activity.java:5231) 
      at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
      at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
            at android.app.ActivityThread.access$800(ActivityThread.java:135) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5001) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
            at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.NullPointerException 
      at com.example.chris.drawingtest.ToolbarFragment.<init>(ToolbarFragment.java:43) 
      at java.lang.Class.newInstanceImpl(Native Method) 
      at java.lang.Class.newInstance(Class.java:1208) 
      at android.app.Fragment.instantiate(Fragment.java:590) 
      at android.app.Fragment.instantiate(Fragment.java:561) 
      at android.app.Activity.onCreateView(Activity.java:4778) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:689) 
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290) 
            at android.app.Activity.setContentView(Activity.java:1929) 
            at com.example.chris.drawingtest.DrawingActivity.onCreate(DrawingActivity.java:18) 
            at android.app.Activity.performCreate(Activity.java:5231) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) 
            at android.app.ActivityThread.access$800(ActivityThread.java:135) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
            at android.os.Handler.dispatchMessage(Handler.java:102) 
            at android.os.Looper.loop(Looper.java:136) 
            at android.app.ActivityThread.main(ActivityThread.java:5001) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:515) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) 
            at dalvik.system.NativeStart.main(Native Method) 

ответ

1
private ImageButton pencilButton = (ImageButton) getActivity().findViewById(R.id.pencil); 
    private ImageButton eraserButton = (ImageButton) getActivity().findViewById(R.id.eraser); 

getActivity() возвращает нуль, прежде чем onAttach. Это приводит к вашему краху. Вы можете перемещать эти строки внутри onCreateView, например, но если pencil и eraser не является частью иерархии зрения деятельности по, pencilButton и eraserButton будут нулевыми

+0

Это было решением. Спасибо. – user2828965

+0

добро пожаловать – Blackbelt

+0

Использование контекста принимается в onAttach() и использовать его другими способами. Потому что при вызове getActivity() каждый раз потребляет время. – Charan