2017-05-04 10 views
0

タイトルはちょっと混乱しますが、私は何を書くべきか分かりません。別のクラスで拡張されたフラグメントのビューを取得するには?

私は、アプリケーションの開始(SlidingTutorial)のスライドチュートリアルを公開するためにライブラリを使用しています。問題は、findViewByIdを使ってフラグメント内のビューを見つける必要があることですが、フラグメントのビューからこの呼び出しを派生させる必要があります。私はメソッドonCreateViewを使用する必要がありますが、タイトルで述べたように、フラグメントはTutorialSupportFragment(フラグメントにもかかわらず)から拡張する必要があるため、onCreateViewメソッドをオーバーライドすると、ライブラリの一部のコンポーネントが読み込まれませんでした。

拡張メソッドを破棄しないでこのonCreateViewを使用する方法はありますか?

public class CustomTutorialFragment extends TutorialSupportFragment implements OnTutorialPageChangeListener, CustomTutorialMvpView { 

... 

私はこれを実行する必要があります。

@Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
          @Nullable Bundle savedInstanceState) { 
     View view = inflater.inflate(getLayoutResId(), container, false); 

     btNext = (Button) view.findViewById(R.id.btNext); 
     btSkip = (Button) view.findViewById(R.id.btSkip); 

     btNext.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       nextPage(); 
      } 
     }); 

     btSkip.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       skipTutorial(); 
      } 
     }); 

     return view; 
    } 

これは私が問題は、私は図書館で作成された以前のものを壊すことなくメソッドをオーバーライドすることができますということだと思い誤差、です。

FATAL EXCEPTION: main 
    Process: com.dummy.carrefour.mvp, PID: 24342 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dummy.carrefour.mvp/com.dummy.carrefour.mvp.ui.tutorial.TutorialActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)' on a null object reference 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2666) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727) 
     at android.app.ActivityThread.-wrap12(ActivityThread.java) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6121) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 
    Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)' on a null object reference 
     at com.cleveroad.slidingtutorial.TutorialImpl.onViewCreated(TutorialImpl.java:97) 
     at com.cleveroad.slidingtutorial.TutorialSupportFragment.onViewCreated(TutorialSupportFragment.java:146) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1314) 
     at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
     at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758) 
     at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363) 
     at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149) 
     at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103) 
     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013) 
     at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:388) 
     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:607) 
     at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:178) 
     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1248) 
     at android.app.Activity.performStart(Activity.java:6699) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2629) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)  
     at android.app.ActivityThread.-wrap12(ActivityThread.java)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:154)  
     at android.app.ActivityThread.main(ActivityThread.java:6121)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)  
  
+1

コードなしで理解することが難しいため、コードを表示できますか? –

+0

投稿、申し訳ありません。見てみましょう。 – MAOL

答えて

2

2つのオプションがあります。

まず一つはsuper.onCreateView()を呼び出し、返されたViewを使用して、アクションを実行することです:

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    View view = super.onCreateView(inflater, container, savedInstanceState); 
    // Perform necessary actions 
    Button button = view.findViewById(R.id.button); 
    return view; 
} 

第二の選択肢はonViewCreated()をオーバーライドすることです。

​​
+1

ありがとうございました@アジズベキャン、良い答え。 – MAOL

+0

@MAOL私はこの回答を受け入れるべきだと思います。 – Vyacheslav

関連する問題