0

onCreate 동안 조각에서 LinearLayout 변수를 지정하려고하면 NPE가 표시됩니다. 이 오류는 API 버전 <23에서만 발생합니다 (모두 시도하지는 않았지만 19 및 16을 시도하고 시작시 충돌이 발생 함). 23 이상에서는 모든 것이 완벽하게 작동하며 이유가 확실하지 않습니다. 문제FindViewById/Butterknife.findById <23에 API NullPointerException을 던지고 있습니다.

코드 :

public void reset() { 
     layoutHolder = ButterKnife.findById(view, R.id.layoutHolder); 
     //I get the same error using (LinearLayout) view.findViewById(...) 
     if (layoutHolder.getChildCount() > 0) { 
      layoutHolder.removeAllViews(); 
      layouts.clear(); 
      sections.clear(); 
      addSectionToLayout(createSection(1)); 
     } 
} 

view은 조각의 onCreate

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     view = inflater.inflate(R.layout.fragment_log, container, false); 
     //Omitted for brevity 
     Butterknife.bind(this, view); 
     return view; 
    } 

오류/stracktrace 나는이 알아낼 수없는 것

E/AndroidRuntime: FATAL EXCEPTION: main 
Process: com.omitted, PID: 2236 
java.lang.NullPointerException 
at butterknife.ButterKnife.findById(ButterKnife.java:343) 
at com.omitted.LogFragment.reset(LogFragment.java:156) 
at com.omitted.LogPresenter.reset(LogPresenter.java:35) 
at com.omitted.CalculatorModel.doReset(CalculatorModel.java:251) 
at com.omitted.CalculatorPresenter.onResetClicked(CalculatorPresenter.java:107) 
at com.omitted.CalculatorFragment.reset(CalculatorFragment.java:130) 
at com.omitted.CalculatorFragment.onCreateView(CalculatorFragment.java:97) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) 
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668) 
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
at android.view.Choreographer.doFrame(Choreographer.java:544) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
t android.app.ActivityThE/AndroidRuntime: FATAL EXCEPTION: main 
ess: com.omitted, PID: 2236 
.lang.NullPointerException 
at butterknife.ButterKnife.findById(ButterKnife.java:343) 
at com.omitted.LogFragment.reset(LogFragment.java:156) 
at com.omitted.LogPresenter.reset(LogPresenter.java:35) 
at com.omitted.CalculatorModel.doReset(CalculatorModel.java:251) 
at com.omitted.CalculatorPresenter.onResetClicked(CalculatorPresenter.java:107) 
at com.omitted.CalculatorFragment.reset(CalculatorFragment.java:130) 
at com.omitted.CalculatorFragment.onCreateView(CalculatorFragment.java:97) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) 
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1177) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1025) 
at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1545) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668) 
at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404) 
at android.widget.LinearLayout.measureVertical(LinearLayout.java:695) 
at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) 
at android.view.View.measure(View.java:16497) 
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1916) 
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1113) 
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1295) 
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000) 
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761) 
at android.view.Choreographer.doCallbacks(Choreographer.java:574) 
at android.view.Choreographer.doFrame(Choreographer.java:544) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityTh 

에 초기화됩니다. 전에이 문제를 겪은 사람이 있습니까? 프래그먼트 수명주기가 API < 23 또는 그 이상입니까?

모든 의견을 보내 주셔서 감사합니다.

+0

'if (view! = null)'을 사용하여 해당 메소드의 코드를 둘러 쌀 경우 문제가 해결되지만 매우 해킹 된 것으로 보입니다. 왜 이것이 필요한가? –

답변

1

ButterKnife.bind (this, view)를 사용하셨습니까?

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_log, container, false); 
     ButterKnife.bind(this, view); 
     // TODO Use fields... 
     return view; 
} 
+0

예. 그러나 'ButterKnife.bind (this, view)'가 제 조각에서 작동하고있는 것 같지 않습니다. 그 이유는 모르겠지만, 특히 다른 조각에서 잘 작동하고 있기 때문에 ( –

+0

두 조각으로 된 탭 레이아웃) 활동에 조각을 초기화 할 수 있습니까? –

관련 문제