查看: 578|回复: 0

[手机开发] Android实现返回键操作思路

发表于 2017-8-1 08:00:04

记录用户点击的操作历史,使用栈数据结构,频繁的操作栈顶(添加,获取,删除),使用LinkedList

捕获用户的返回键操作,响应返回键,返回上一个界面

MainActivity.java

  1. /**
  2. * 返回键处理
  3. */
  4. @Override
  5. public boolean onKeyDown(int keyCode, KeyEvent event) {
  6. if(keyCode==KeyEvent.KEYCODE_BACK){
  7. boolean result=MiddleManager.getInstance().goBack();
  8. if(!result){
  9. Toast.makeText(MainActivity.this, "是否退出应用", 1).show();
  10. }
  11. return false;
  12. }
  13. return super.onKeyDown(keyCode, event);
  14. }
复制代码

MiddleManager.java

  1. //操作历史栈
  2. private LinkedList<String> HISTORY=new LinkedList<String>();
  3. /**
  4. * 处理返回键
  5. * @return
  6. */
  7. public boolean goBack() {
  8. //如果为空会抛异常
  9. if(HISTORY.size()>0){
  10. if(HISTORY.size()==1){
  11. return false;
  12. }
  13. HISTORY.removeFirst();
  14. if(HISTORY.size()>0){
  15. String key=HISTORY.getFirst();
  16. BaseView targetView=VIEWCACHE.get(key);
  17. mainContainer.removeAllViews();
  18. View child=targetView.getView();
  19. mainContainer.addView(child);
  20. child.startAnimation(AnimationUtils.loadAnimation(mainContainer.getContext(), R.anim.left_to_right));
  21. currentView=targetView;
  22. return true;
  23. }
  24. }
  25. return false;
  26. }
复制代码
  1. /**
  2. * 加载界面
  3. */
  4. public void loadView(Class<? extends BaseView> baseViewClass) {
  5. BaseView baseView=null;
  6. //判断是否存在
  7. String key=baseViewClass.getSimpleName();
  8. if(VIEWCACHE.containsKey(key)){
  9. baseView=VIEWCACHE.get(key);
  10. }else{
  11. try {
  12. Constructor<? extends BaseView> constructor;
  13. constructor = baseViewClass.getConstructor(Context.class);
  14. baseView=constructor.newInstance(mainContainer.getContext());
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }
  18. VIEWCACHE.put(key, baseView);
  19. }
  20. mainContainer.removeAllViews();
  21. View child=baseView.getView();
  22. mainContainer.addView(child);
  23. child.startAnimation(AnimationUtils.loadAnimation(mainContainer.getContext(), R.anim.left_to_right));
  24. currentView=baseView;
  25. //放入栈
  26. HISTORY.addFirst(key);
  27. }
复制代码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。



回复

使用道具 举报