commit cf6fb87fc547bd30e3f6bdd03dd03095ca374212
Author: Leszek Koltunski <leszek@koltunski.pl>
Date:   Mon Jul 30 13:35:47 2018 +0100

    Some progress with Effects3D app

diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
index 9cfe0ac..cdafa40 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DActivity.java
@@ -395,6 +395,7 @@ public class Effects3DActivity extends Activity
     setContentView(view);
 
     mViewPager = findViewById(R.id.effects3d_viewpager);
+    mViewPager.setOffscreenPageLimit(2);
     mPager = new Effects3DTabViewPager(this, getFragmentManager() );
     mViewPager.setAdapter(mPager);
     TabLayout tabLayout = findViewById(R.id.effects3d_sliding_tabs);
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java b/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java
index 6613e61..cfe13a7 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DTab.java
@@ -35,13 +35,11 @@ import org.distorted.library.effect.EffectType;
 import org.distorted.library.main.DistortedEffects;
 
 import java.util.ArrayList;
-import java.lang.ref.WeakReference;
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
 public class Effects3DTab extends Fragment implements AdapterView.OnItemSelectedListener
   {
-  private WeakReference<Effects3DActivity> mAct;
   private EffectType mType;
   private ArrayList<Effects3DEffect> mList;
   private int mEffectAdd;
@@ -56,20 +54,40 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
     {
     mList = new ArrayList<>();
     mEffectAdd = 0;
+
+    android.util.Log.e("tab", "TAB CONSTRUCTOR");
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
 
-  void setParams(EffectType type, WeakReference<Effects3DActivity> act, int tab, int layout, int spinner)
+  @Override
+  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
     {
-    mTab     = tab;
-    mLayout  = layout;
-    mSpinner = spinner;
-    mType    = type;
-    mAct     = act;
-    mEffects = act.get().getEffects();
+    Bundle args = getArguments();
+
+    int position = args.getInt("position");
+
+    switch(position)
+      {
+      case 0: mTab     = R.layout.effects3dtab1;
+              mLayout  = R.id.effects3dlayout1;
+              mSpinner = R.id.effects3dspinner1;
+              mType    = EffectType.VERTEX;
+              break;
+      case 1: mTab     = R.layout.effects3dtab2;
+              mLayout  = R.id.effects3dlayout2;
+              mSpinner = R.id.effects3dspinner2;
+              mType    = EffectType.FRAGMENT;
+              break;
+      case 2: mTab     = R.layout.effects3dtab3;
+              mLayout  = R.id.effects3dlayout3;
+              mSpinner = R.id.effects3dspinner3;
+              mType    = EffectType.POSTPROCESS;
+              break;
+      }
 
-    android.util.Log.e("tab", "setparams: "+type.name() );
+    Effects3DActivity act = (Effects3DActivity)getActivity();
+    mEffects = act.getEffects();
 
     createEffectNames(mType);
     mEffectStrings = new String[mEffectNames.length];
@@ -77,16 +95,10 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
     for (int i = 0; i < mEffectNames.length; i++)
       {
       mEffectStrings[i] = mEffectNames[i].name();
-
-      android.util.Log.d("tab", "  effect: "+mEffectStrings[i]);
       }
-    }
 
-///////////////////////////////////////////////////////////////////////////////////////////////////
+    android.util.Log.e("tab", "onCreateView, this is fragment position "+position+" type="+mType.name());
 
-  @Override
-  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
-    {
     View rootView = inflater.inflate( mTab, container, false);
     return rootView;
     }
@@ -99,13 +111,27 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
     super.onStart();
 
     android.util.Log.e("tab", "onStart, type="+mType.name());
+    }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////
 
-    Effects3DActivity act = mAct.get();
+  @Override
+  public void onResume()
+    {
+    super.onResume();
+
+    android.util.Log.e("tab", "onResume, type="+mType.name());
+
+    Effects3DActivity act = (Effects3DActivity)getActivity();
 
     ArrayAdapter<String> adapterEffect = new ArrayAdapter<>( act, android.R.layout.simple_spinner_item, mEffectStrings);
     adapterEffect.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
     Spinner effectSpinner = act.findViewById(mSpinner);
+
+    if( mSpinner == R.id.effects3dspinner1 ) android.util.Log.e("tab", "onStart, mSpinner correct");
+    if( effectSpinner==null ) android.util.Log.e("tab", "onStart, effectSpinner null");
+
     effectSpinner.setOnItemSelectedListener(this);
     effectSpinner.setAdapter(adapterEffect);
 
@@ -132,7 +158,8 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
   private void resetData()
     {
-    Effects3DSurfaceView view = mAct.get().findViewById(R.id.effects3dSurfaceView);
+    Effects3DActivity act = (Effects3DActivity)getActivity();
+    Effects3DSurfaceView view = act.findViewById(R.id.effects3dSurfaceView);
     view.getRenderer().showRegionAndCenter(false,false);
     }
 
@@ -140,10 +167,11 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
   void newEffect()
     {
-    Effects3DEffect eff = new Effects3DEffect(mEffectNames[mEffectAdd], mAct.get() );
+    Effects3DActivity act = (Effects3DActivity)getActivity();
+    Effects3DEffect eff = new Effects3DEffect(mEffectNames[mEffectAdd], act );
     mList.add(eff);
 
-    LinearLayout layout = mAct.get().findViewById(mLayout);
+    LinearLayout layout = act.findViewById(mLayout);
     View view = eff.createView();
     layout.addView(view);
 
@@ -161,7 +189,6 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
     eff.apply(mEffects);
 
-    Effects3DActivity act = mAct.get();
     boolean region = act.getShowRegion();
     boolean center = act.getShowCenter();
 
@@ -196,7 +223,7 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
 
   void removeAll()
     {
-    Effects3DActivity act = mAct.get();
+    Effects3DActivity act = (Effects3DActivity)getActivity();
 
     mList.clear();
     LinearLayout layout = act.findViewById(mLayout);
@@ -215,7 +242,8 @@ public class Effects3DTab extends Fragment implements AdapterView.OnItemSelected
       {
       if( effect.thisView(v) )
         {
-        LinearLayout layout = mAct.get().findViewById(mLayout);
+        Effects3DActivity act = (Effects3DActivity)getActivity();
+        LinearLayout layout = act.findViewById(mLayout);
         View view;
 
         view = effect.getEffect();
diff --git a/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java b/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java
index f300d80..366ceae 100644
--- a/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java
+++ b/src/main/java/org/distorted/examples/effects3d/Effects3DTabViewPager.java
@@ -21,11 +21,11 @@ package org.distorted.examples.effects3d;
 
 import android.app.Fragment;
 import android.app.FragmentManager;
+import android.os.Bundle;
 import android.support.v13.app.FragmentPagerAdapter;
 import android.view.View;
 
 import org.distorted.examples.R;
-import org.distorted.library.effect.EffectType;
 
 import java.lang.ref.WeakReference;
 
@@ -45,6 +45,8 @@ public class Effects3DTabViewPager extends FragmentPagerAdapter
     super(fm);
     mAct = new WeakReference<>(act);
     mTab = new Effects3DTab[NUM_TABS];
+
+    android.util.Log.e("viewPager"," CONSTRUCTOR ");
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
@@ -75,19 +77,17 @@ public class Effects3DTabViewPager extends FragmentPagerAdapter
     {
     android.util.Log.e("viewPager","creating tab "+position);
 
-    switch(position)
+    if( position>=0 && position<NUM_TABS )
       {
-      case  0: mTab[0] = new Effects3DTab();
-               mTab[0].setParams(EffectType.VERTEX     , mAct, R.layout.effects3dtab1, R.id.effects3dlayout1, R.id.effects3dspinner1);
-               return mTab[0];
-      case  1: mTab[1] = new Effects3DTab();
-               mTab[1].setParams(EffectType.FRAGMENT   , mAct, R.layout.effects3dtab2, R.id.effects3dlayout2, R.id.effects3dspinner2);
-               return mTab[1];
-      case  2: mTab[2] = new Effects3DTab();
-               mTab[2].setParams(EffectType.POSTPROCESS, mAct, R.layout.effects3dtab3, R.id.effects3dlayout3, R.id.effects3dspinner3);
-               return mTab[2];
-      default: return null;
+      Bundle bundle = new Bundle();
+      bundle.putInt("position", position);
+
+      mTab[position] = new Effects3DTab();
+      mTab[position].setArguments(bundle);
+      return mTab[position];
       }
+
+    return null;
     }
 
 ///////////////////////////////////////////////////////////////////////////////////////////////////
