• 实现某个回调自动触发的一个思路


         在开发过程中是不是老是想让某个点击事件或者回调方法自动触发,却又无能为力,人家是系统级调用的,我们无法操控;但是又需要实现这样的效果该怎么办呢?
        我想到了一个思路,我们可以把回调方法中的语句摘出来构造成一个方法,只要我们能够构造出这个方法所需要的参数,我们就能够实现“回调的自动触发”的效果。
         例如:
        我这里有个列表当作tab,第一个tab为主界面,我的需求是,当在主界面时点击返回键推出程序,当在其他界面点击返回键是调到主界面;要是只是实现这个效果再简单不过了 ,是需要换个界面就行了,关键是我的列表tab被选中时是有效果的,展示内容界面可以换,但是listview的item的选中的效果是点击时才会触发的;这个时候是不是很想在按返回键的时候触发listview的第0个item的点击事件...
        例如这是我的点击事件里的代码:
          /**
          * 初始化监听器
          */
           private   void  initListener() {
                 menu_function  .setOnItemClickListener(  new  OnItemClickListener() {
                     @Override
                     public   void   onItemClick(AdapterView<?> parent, View view,
                               int  position,  long  id) {
                        changeCurrentView(parent, view, position);
                  }
              });
         }
         
           /**
          * 根据position改变当先的展示
          *  @param  parent
          *  @param  view
          *  @param  position
          */
           public   void  changeCurrentView(AdapterView<?> parent, View view,
                     int  position) {
                 for  ( int   i = 0; i <parent.getChildCount(); i ++){
                   ((ImageView)parent.getChildAt(i).findViewById(R.id.   menu_function_icon  )).setColorFilter(getResources().getColor(R.color.  icon_dark_blue ));
                   ((TextView)parent.getChildAt(i).findViewById(R.id.   menu_function_content  )).setTextColor(getResources().getColor(R.color.  font_dark_blue ));
              }
              ImageView icon = (ImageView) view.findViewById(R.id. menu_function_icon   );
              TextView content = (TextView) view.findViewById(R.id. menu_function_content   );
              icon.setColorFilter(Color.   WHITE  , Mode. SRC_IN   );
              content.setTextColor(Color.   WHITE  );
              
                 if  (MenuActivity.  mCurrentFlag  == position){
                  ((MenuActivity)getActivity()).toggle();
                     return  ;
              }

              MenuActivity.   mCurrentFlag  = position;
                 switch  (position) {
                 case  0:
                     cur_fragment  = MailListFragment.getInstante(  sm );
                     break  ;
                 case  1:
                     cur_fragment  =  new   MailContactsFragment();
                     break  ;
                 case  2:
                     cur_fragment  =  new   MailContactsFragment();
                     break  ;
                 default  :
                     break  ;
              }
              MenuActivity menu = (MenuActivity) getActivity();
                 //设置主界面内容布局
              menu.getSupportFragmentManager()
              .beginTransaction()
              .replace(R.id.   main_layout  ,  cur_fragment   )
              .commit();
              menu.getSlidingMenu().showContent();
         }
    很明显就能看出我把onItemClick方法里的代码抽取成了一个方法,方法的参数与onClick传入的参数相同;剩下的问题就是如很能够
    构造出这些参数,并传给方法;
         这个问题就要视情况而定了,例如我这里是listview的onItemClick方法的参数,参数分别是 AdapterView<?> parent, View view,  int  position,  long  id  第一个参数就是listview本身,第二个参数是被点击的View,第三个就是listview中被点击item的位置,第四个木有用到;我们只要构造出这三个参数就OK了,如果我们的需求不是很过分的话,这三个参数是很容易就构造出来的,我是这样做的:
    AdapterView<?> parent =  mFrag .getMenu_function();
    View view = parent.getChildAt(0);
    int  position = 0;
    mFrag .changeCurrentView(parent, view, position);
    我的listview写在Activity的fragment里,叫menu_function,只要添加一个get方法就很容易获得第一个参数;
    第二个参数更容易,要让第几个item自动被点击就得到listview的第几个item的View对象;
    第三个就是被自动点击的item的位置;
    然后调用该方法就OK了;
















  • 相关阅读:
    什么是多线程中的上下文切换?
    什么是基本表?什么是视图?
    什么是存储过程?用什么来调用?
    随意写文件命令?怎么向屏幕输出带空格的字符串,比如” hello world”?
    NULL 是什么意思 ?
    Mock 或 Stub 有什么区别?
    什么叫视图?游标是什么?
    什么是微服务中的反应性扩展?
    什么是线程组,为什么在 Java 中不推荐使用?
    Java 中用到的线程调度算法是什么?
  • 原文地址:https://www.cnblogs.com/james1207/p/3275744.html
Copyright © 2020-2023  润新知