1.修改Fragment切换为ViewPage2
authorkfl_614 <kfl_614@163.com>
Tue, 31 Mar 2020 02:41:59 +0000 (10:41 +0800)
committerkfl_614 <kfl_614@163.com>
Tue, 31 Mar 2020 02:41:59 +0000 (10:41 +0800)
app/build.gradle
app/src/main/java/com/ic/hardware/PedometerActivity.java
app/src/main/java/com/ic/hardware/adapter/FragmentAdapter.java [new file with mode: 0644]
app/src/main/java/com/ic/hardware/fragment/pedometer/PedMainFragment.java
app/src/main/res/layout/activity_pedometer.xml
app/version_code.properties

index 284fc0f..9cff432 100644 (file)
@@ -132,4 +132,6 @@ dependencies {
     implementation 'com.google.android.material:material:1.2.0-alpha05'
 
     implementation 'com.jakewharton.threetenabp:threetenabp:1.2.2'
+
+    implementation 'androidx.viewpager2:viewpager2:1.0.0'
 }
index 7e98bfb..acf86ca 100644 (file)
@@ -1,17 +1,15 @@
 package com.ic.hardware;
 
 import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.view.GestureDetectorCompat;
-import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentTransaction;
 import androidx.lifecycle.ViewModelProvider;
 import androidx.recyclerview.widget.LinearLayoutManager;
 import androidx.recyclerview.widget.RecyclerView;
+import androidx.viewpager2.widget.ViewPager2;
 
 import android.os.Bundle;
-import android.view.MotionEvent;
 
+import com.ic.hardware.adapter.FragmentAdapter;
 import com.ic.hardware.adapter.IndicatorAdapter;
 import com.ic.hardware.fragment.pedometer.PedMainFragment;
 import com.ic.hardware.fragment.pedometer.PedRecordFragment;
@@ -21,31 +19,28 @@ import com.ic.hardware.model.PedometerModel;
 import com.ic.hardware.util.IcLog;
 import com.ic.hardware.util.SPUtils;
 
+import static androidx.viewpager2.widget.ViewPager2.SCROLL_STATE_IDLE;
+
 public class PedometerActivity extends AppCompatActivity
         implements PedSetupDialogFragment.NoticeDialogListener,
         PedMainFragment.QueryPedometerCountListener,
-        PedRecordFragment.QueryPedometerRecordListener,
-        MainClockGestureDetectorImpl.OnClockGestureFlingListener {
+        PedRecordFragment.QueryPedometerRecordListener {
 
     private static final String TAG = "PedometerActivity";
 
-    private FragmentManager fragmentManager;
-
     private PedometerModel pedometerModel;
     private IndicatorAdapter indicatorAdapter;
-    private int currIndex;
-    private Fragment[] mFtList;
 
-    private GestureDetectorCompat gesture;
+    private FragmentAdapter myAdapter;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_pedometer);
-        initFt();
+
+        initViewPage();
         initIndicator();
         initPedometerModel();
-        initOnTouchListener();
     }
 
     private void initPedometerModel() {
@@ -53,11 +48,11 @@ public class PedometerActivity extends AppCompatActivity
         pedometerModel = new ViewModelProvider(this, factory).get(PedometerModel.class);
 
         pedometerModel.getObsPedCount().observe(this, integer -> {
-            ((PedMainFragment) mFtList[1]).updatePedNumber(integer);
+            ((PedMainFragment)myAdapter.getFragment(1)).updatePedNumber(integer);
         });
 
         pedometerModel.getObsPedRecord().observe(this, record -> {
-            ((PedRecordFragment) mFtList[2]).updatePedRecord(record);
+            ((PedRecordFragment)myAdapter.getFragment(2)).updatePedRecord(record);
         });
 
         pedometerModel.onBindService();
@@ -84,7 +79,7 @@ public class PedometerActivity extends AppCompatActivity
 
     @Override
     public void onDialogUpdate(int type, int value) {
-        ((PedSetupFragment) mFtList[0]).updateSetuUpValue(type, value);
+        ((PedSetupFragment) myAdapter.getFragment(0)).updateSetuUpValue(type, value);
         switch (type) {
             case 0:
                 pedometerModel.syncPedHeightSetting(value);
@@ -96,44 +91,15 @@ public class PedometerActivity extends AppCompatActivity
         }
     }
 
-    @Override
-    public void onDirection(int flag) {
-        switch (flag) {
-            case 1:
-                //左滑
-                if (currIndex == mFtList.length - 1) {
-                    return;
-                } else {
-                    currIndex++;
-                    commitFragment(mFtList[currIndex]);
-                    indicatorAdapter.updateIndicatorState(currIndex);
-                }
-                break;
-            case 2:
-                //右滑
-                IcLog.i(TAG,"Right >>>>>>>>>>>>>>>");
-                if (currIndex == 0) {
-                    return;
-                } else {
-                    currIndex--;
-                    commitFragment(mFtList[currIndex]);
-                    indicatorAdapter.updateIndicatorState(currIndex);
-                }
-                break;
-        }
+    private void initViewPage() {
+        ViewPager2 myViewPager2 = findViewById(R.id.ped_main_view_page);
+        myAdapter = new FragmentAdapter(getSupportFragmentManager(), getLifecycle());
+        myViewPager2.setAdapter(myAdapter);
+        myViewPager2.setCurrentItem(1);
+        myViewPager2.registerOnPageChangeCallback(currentItemUpdater);
     }
 
 
-    private void initFt() {
-        fragmentManager = getSupportFragmentManager();
-        mFtList = new Fragment[3];
-        mFtList[0] = PedSetupFragment.newInstance();
-        mFtList[1] = PedMainFragment.newInstance();
-        mFtList[2] = PedRecordFragment.newInstance();
-        currIndex = 1;
-        commitFragment(mFtList[1]);
-    }
-
     private void initIndicator() {
         RecyclerView indicatorRv = findViewById(R.id.ped_indicator_rv);
         indicatorAdapter = new IndicatorAdapter();
@@ -142,39 +108,19 @@ public class PedometerActivity extends AppCompatActivity
         indicatorRv.setAdapter(indicatorAdapter);
     }
 
-    private void commitFragment(Fragment fragment) {
-        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
-
-        for (int i = 0; i < mFtList.length; i++) {
-            if(mFtList[i].isAdded()){
-                fragmentTransaction.hide(mFtList[i]);
-            }
+    private final ViewPager2.OnPageChangeCallback currentItemUpdater = new ViewPager2.OnPageChangeCallback() {
+        @Override
+        public void onPageSelected(int position) {
+            IcLog.i(TAG,"onPageSelected"+position);
+            indicatorAdapter.updateIndicatorState(position);
         }
 
-        if (fragment.isAdded()) {
-            fragmentTransaction.show(fragment);
-        } else {
-            fragmentTransaction.add(R.id.ped_content_fl, fragment);
+        @Override
+        public void onPageScrollStateChanged(int newState) {
+            IcLog.i(TAG,"onPageScrollStateChanged"+newState);
+            if (newState == SCROLL_STATE_IDLE) {
+                IcLog.i(TAG,"onPageScrollStateChanged"+newState);
+            }
         }
-
-
-        fragmentTransaction.commit();
-    }
-
-
-    private void initOnTouchListener() {
-        gesture  = new GestureDetectorCompat(this ,new MainClockGestureDetectorImpl(this));
-    }
-
-    @Override
-    public boolean dispatchTouchEvent(MotionEvent ev) {
-        gesture.onTouchEvent(ev);
-        super.dispatchTouchEvent(ev);
-        return false;
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        return gesture.onTouchEvent(event);
-    }
+    };
 }
diff --git a/app/src/main/java/com/ic/hardware/adapter/FragmentAdapter.java b/app/src/main/java/com/ic/hardware/adapter/FragmentAdapter.java
new file mode 100644 (file)
index 0000000..a6e20c6
--- /dev/null
@@ -0,0 +1,43 @@
+package com.ic.hardware.adapter;
+
+import androidx.annotation.NonNull;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.lifecycle.Lifecycle;
+import androidx.viewpager2.adapter.FragmentStateAdapter;
+
+import com.ic.hardware.fragment.pedometer.PedMainFragment;
+import com.ic.hardware.fragment.pedometer.PedRecordFragment;
+import com.ic.hardware.fragment.pedometer.PedSetupFragment;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class FragmentAdapter extends FragmentStateAdapter {
+
+    private List<Fragment> arrayList = new ArrayList<>();
+
+    public FragmentAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
+        super(fragmentManager, lifecycle);
+        arrayList.add(PedSetupFragment.newInstance());
+        arrayList.add(PedMainFragment.newInstance());
+        arrayList.add(PedRecordFragment.newInstance());
+    }
+
+
+    public Fragment getFragment(int index) {
+        return arrayList.get(index);
+    }
+
+
+    @NonNull
+    @Override
+    public Fragment createFragment(int position) {
+        return arrayList.get(position);
+    }
+
+    @Override
+    public int getItemCount() {
+        return arrayList.size();
+    }
+}
index d396c28..458b273 100644 (file)
@@ -75,13 +75,8 @@ public class PedMainFragment extends Fragment {
         updatePedNumber(0);
         targetValue = SPUtils.getPedTargetSP(mApp.getApplicationContext());
         pedMainBinding.setPedTarget(String.valueOf(targetValue));
-        return pedMainBinding.getRoot();
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
         queryListner.onQueryCount();
+        return pedMainBinding.getRoot();
     }
 
     public void updatePedNumber(int number) {
index 235addf..cfd5b7f 100644 (file)
@@ -7,15 +7,15 @@
     android:layout_height="match_parent"
     tools:context=".PedometerActivity">
 
-    <FrameLayout
-        android:id="@+id/ped_content_fl"
+    <androidx.viewpager2.widget.ViewPager2
+        android:id="@+id/ped_main_view_page"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"/>
+        android:layout_height="match_parent" />
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/ped_indicator_rv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:overScrollMode="never"
-        android:layout_gravity="bottom|center_horizontal"/>
+        android:layout_gravity="bottom|center_horizontal"
+        android:overScrollMode="never" />
 </FrameLayout>
\ No newline at end of file
index ca07aa4..018936f 100644 (file)
@@ -1,2 +1,2 @@
-#Mon Mar 23 18:58:57 CST 2020
-VERSION_CODE=11
+#Mon Mar 30 19:26:06 CST 2020
+VERSION_CODE=13