From b780f0867f0737887c77736554292b3fcccc4ab1 Mon Sep 17 00:00:00 2001 From: kfl_614 Date: Tue, 31 Mar 2020 10:41:59 +0800 Subject: [PATCH] =?utf8?q?1.=E4=BF=AE=E6=94=B9Fragment=E5=88=87=E6=8D=A2?= =?utf8?q?=E4=B8=BAViewPage2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 2 + .../com/ic/hardware/PedometerActivity.java | 112 +++++------------- .../ic/hardware/adapter/FragmentAdapter.java | 43 +++++++ .../fragment/pedometer/PedMainFragment.java | 7 +- .../main/res/layout/activity_pedometer.xml | 10 +- app/version_code.properties | 4 +- 6 files changed, 82 insertions(+), 96 deletions(-) create mode 100644 app/src/main/java/com/ic/hardware/adapter/FragmentAdapter.java diff --git a/app/build.gradle b/app/build.gradle index 284fc0f..9cff432 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' } diff --git a/app/src/main/java/com/ic/hardware/PedometerActivity.java b/app/src/main/java/com/ic/hardware/PedometerActivity.java index 7e98bfb..acf86ca 100644 --- a/app/src/main/java/com/ic/hardware/PedometerActivity.java +++ b/app/src/main/java/com/ic/hardware/PedometerActivity.java @@ -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 index 0000000..a6e20c6 --- /dev/null +++ b/app/src/main/java/com/ic/hardware/adapter/FragmentAdapter.java @@ -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 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(); + } +} diff --git a/app/src/main/java/com/ic/hardware/fragment/pedometer/PedMainFragment.java b/app/src/main/java/com/ic/hardware/fragment/pedometer/PedMainFragment.java index d396c28..458b273 100644 --- a/app/src/main/java/com/ic/hardware/fragment/pedometer/PedMainFragment.java +++ b/app/src/main/java/com/ic/hardware/fragment/pedometer/PedMainFragment.java @@ -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) { diff --git a/app/src/main/res/layout/activity_pedometer.xml b/app/src/main/res/layout/activity_pedometer.xml index 235addf..cfd5b7f 100644 --- a/app/src/main/res/layout/activity_pedometer.xml +++ b/app/src/main/res/layout/activity_pedometer.xml @@ -7,15 +7,15 @@ android:layout_height="match_parent" tools:context=".PedometerActivity"> - + android:layout_height="match_parent" /> + android:layout_gravity="bottom|center_horizontal" + android:overScrollMode="never" /> \ No newline at end of file diff --git a/app/version_code.properties b/app/version_code.properties index ca07aa4..018936f 100644 --- a/app/version_code.properties +++ b/app/version_code.properties @@ -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 -- 2.17.1