package com.dayu.pipirrapp.activity; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.fragment.app.Fragment; import com.dayu.pipirrapp.MyApplication; import com.dayu.pipirrapp.R; import com.dayu.pipirrapp.adapter.TabAdapter; import com.dayu.pipirrapp.bean.db.TagBean; import com.dayu.pipirrapp.dao.DaoSingleton; import com.dayu.pipirrapp.databinding.ActivityMainBinding; import com.dayu.pipirrapp.fragment.OrderFragment; import com.dayu.pipirrapp.fragment.MapFragment; import com.dayu.pipirrapp.fragment.MyFragment; import com.dayu.pipirrapp.net.MqttManager; import java.util.ArrayList; import java.util.List; /** * 首页 */ public class MainActivity extends AppCompatActivity { private ActivityMainBinding binding; private List fragments = new ArrayList<>(); private long mExitTime; MqttManager mqttManager; private enum Tab { ORDER, MAP, MY } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityMainBinding.inflate(LayoutInflater.from(this)); setContentView(binding.getRoot()); setupFragments(); initView(); initTab(); TagBean tagBean = DaoSingleton.getInstance(this).tagDao().findFirst(); MyApplication.myApplication.myTag = tagBean.getTag(); mqttManager = new MqttManager(this); mqttManager.connect(); } private void setupFragments() { fragments.add(new OrderFragment()); fragments.add(new MapFragment()); fragments.add(new MyFragment()); } private void initView() { binding.orderLL.setOnClickListener(v -> changeBottomState(Tab.ORDER)); binding.mapLL.setOnClickListener(v -> changeBottomState(Tab.MAP)); binding.myLL.setOnClickListener(v -> changeBottomState(Tab.MY)); } private void initTab() { TabAdapter adapter = new TabAdapter(getSupportFragmentManager(), fragments); binding.viewPager.setAdapter(adapter); binding.viewPager.setPagingEnabled(false); binding.viewPager.setOffscreenPageLimit(fragments.size()); binding.viewPager.setCurrentItem(1); // 默认显示地图页 } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { if ((System.currentTimeMillis() - mExitTime) > 2000) { Toast.makeText(MainActivity.this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); mExitTime = System.currentTimeMillis(); } else { finish(); } return true; } return super.onKeyDown(keyCode, event); } @Override protected void onDestroy() { super.onDestroy(); //关闭MQ mqttManager.disconnect(); } /** * 修改底部状态 */ private void changeBottomState(Tab tab) { resetTabState(); switch (tab) { case ORDER: updateTabUI(0, R.drawable.bottom_order_white, R.color.white); break; case MAP: updateTabUI(1, R.drawable.bottom_map_white, R.color.white); break; case MY: updateTabUI(2, R.drawable.bottom_my_white, R.color.white); break; } } /** * 更新某个 Tab 的 UI 状态 */ private void updateTabUI(int position, int iconResId, int textColorResId) { binding.viewPager.setCurrentItem(position); switch (position) { case 0: binding.orderImg.setImageDrawable(ContextCompat.getDrawable(this, iconResId)); binding.orderText.setTextColor(ContextCompat.getColor(this, textColorResId)); break; case 1: binding.mapImg.setImageDrawable(ContextCompat.getDrawable(this, iconResId)); binding.mapText.setTextColor(ContextCompat.getColor(this, textColorResId)); break; case 2: binding.myImg.setImageDrawable(ContextCompat.getDrawable(this, iconResId)); binding.myText.setTextColor(ContextCompat.getColor(this, textColorResId)); break; } } /** * 重置所有 Tab 的默认状态 */ private void resetTabState() { binding.orderImg.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.bottom_order_black)); binding.orderText.setTextColor(ContextCompat.getColor(this, R.color.black)); binding.mapImg.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.bottom_map_black)); binding.mapText.setTextColor(ContextCompat.getColor(this, R.color.black)); binding.myImg.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.bottom_my_black)); binding.myText.setTextColor(ContextCompat.getColor(this, R.color.black)); } }