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

     在开发过程中是不是老是想让某个点击事件或者回调方法自动触发,却又无能为力,人家是系统级调用的,我们无法操控;但是又需要实现这样的效果该怎么办呢?
    我想到了一个思路,我们可以把回调方法中的语句摘出来构造成一个方法,只要我们能够构造出这个方法所需要的参数,我们就能够实现“回调的自动触发”的效果。
     例如:
    我这里有个列表当作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了;
















原文地址:https://www.cnblogs.com/james1207/p/3275744.html