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;
}
};
}