Android开发点击物理键返回

Android开发点击物理键返回
#Activity

public class MainActivity extends AppCompatActivity implements View.OnClickListener, CallBackValue {
    private RelativeLayout rlHome, rlMsg, rlMine;
    private ImageView ivHome, ivMsg, ivMine;
    private TextView tvHome, tvMsg, tvMine;
    private HomeFragment homeFragment;
    private MsgFragment msgFragment;
    private MineFragment mineFragment;
    //APP退出操作按钮
    private long mWaitTime = 2000;
    private long mTochTime = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        selectFragment(ParameterConfig.MINE);
    }

    private void initView() {
        rlHome = findViewById(R.id.rl_bottom_home);
        rlHome.setOnClickListener(this);
        rlMsg = findViewById(R.id.rl_bottom_msg);
        rlMsg.setOnClickListener(this);
        rlMine = findViewById(R.id.rl_bottom_mine);
        rlMine.setOnClickListener(this);
        ivHome = findViewById(R.id.iv_bottom_home);
        ivMsg = findViewById(R.id.iv_bottom_msg);
        ivMine = findViewById(R.id.iv_bottom_mine);
        tvHome = findViewById(R.id.tv_bottom_home);
        tvMsg = findViewById(R.id.tv_bottom_msg);
        tvMine = findViewById(R.id.tv_bottom_mine);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.rl_bottom_home:
                selectFragment(ParameterConfig.HOME);
                break;
            case R.id.rl_bottom_msg:
                selectFragment(ParameterConfig.MSG);
                break;
            case R.id.rl_bottom_mine:
                selectFragment(ParameterConfig.MINE);
                break;
        }
    }

    private void selectFragment(int type) {
        clearBottom();
        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction transaction = fm.beginTransaction();
        hideFragment(transaction);
        switch (type) {
            case ParameterConfig.HOME:
                ivHome.setImageResource(R.drawable.home_select);
                tvHome.setTextColor(getResources().getColor(R.color.primary_green));
                if (homeFragment == null) {
                    homeFragment = new HomeFragment();
                    transaction.add(R.id.fl_main_content, homeFragment);
                } else {
                    transaction.show(homeFragment);
                }
                break;
            case ParameterConfig.MSG:
                ivMsg.setImageResource(R.drawable.add_select);
                tvMsg.setTextColor(getResources().getColor(R.color.primary_green));
                if (msgFragment == null) {
                    msgFragment = new MsgFragment();
                    transaction.add(R.id.fl_main_content, msgFragment);
                } else {
                    transaction.show(msgFragment);
                }
                break;
            case ParameterConfig.MINE:
                ivMine.setImageResource(R.drawable.mine_select);
                tvMine.setTextColor(getResources().getColor(R.color.primary_green));
                if (mineFragment == null) {
                    mineFragment = new MineFragment();
                    transaction.add(R.id.fl_main_content, mineFragment);
                } else {
                    transaction.show(mineFragment);
                }
                break;
        }
        transaction.commit();
    }

    private void hideFragment(FragmentTransaction transaction) {
        if (homeFragment != null) {
            transaction.hide(homeFragment);
        }
        if (msgFragment != null) {
            transaction.hide(msgFragment);
        }
        if (mineFragment != null) {
            transaction.hide(mineFragment);
        }
    }

    private void clearBottom() {
        ivHome.setImageResource(R.drawable.home_normal);
        tvHome.setTextColor(getResources().getColor(R.color.primary_font_fair));
        ivMsg.setImageResource(R.drawable.add_normal);
        tvMsg.setTextColor(getResources().getColor(R.color.primary_font_fair));
        ivMine.setImageResource(R.drawable.mine_normal);
        tvMine.setTextColor(getResources().getColor(R.color.primary_font_fair));
    }

    /**
     * 点击回调
     *
     * @param type
     */
    @Override
    public void SendMessageValue(int type) {
        if (type == ParameterConfig.HOME) {
            selectFragment(ParameterConfig.HOME);
        }
    }

    /**
     * 再按一次退出系统
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN
                && KeyEvent.KEYCODE_BACK == keyCode) {
            long currentTime = System.currentTimeMillis();
            if ((currentTime - mTochTime) >= mWaitTime) {
                //"再按返回键退出应用!"
                Toast.makeText(this, "再按一次退出系统", Toast.LENGTH_SHORT).show();
                mTochTime = currentTime;
            } else {
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

#Fragment

public class HomeFragment extends Fragment {
    //APP退出操作按钮
    private long mWaitTime = 2000;
    private long mTochTime = 0;

    public HomeFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_home, container, false);
        v.setFocusable(true);
        v.setFocusableInTouchMode(true);
        v.setOnKeyListener(backListener);
        return v;
    }

    /**
     * APP退出操作按钮
     */
    private View.OnKeyListener backListener = new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK
                    && event.getAction() == KeyEvent.ACTION_DOWN) {
                if ((System.currentTimeMillis() - mTochTime) > mWaitTime) {
                    Toast.makeText(getActivity(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
                    mTochTime = System.currentTimeMillis();
                } else {
                    getActivity().finish();
                    System.exit(0);
                }
                return true;
            }
            return false;
        }
    };

}
发布了22 篇原创文章 · 获赞 31 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36158551/article/details/83348510