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;
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() {
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();
@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);
}
}
- @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();
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);
- }
+ };
}
--- /dev/null
+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();
+ }
+}