在开发过程中是不是老是想让某个点击事件或者回调方法自动触发,却又无能为力,人家是系统级调用的,我们无法操控;但是又需要实现这样的效果该怎么办呢?

    我想到了一个思路,我们可以把回调方法中的语句摘出来构造成一个方法,只要我们能够构造出这个方法所需要的参数,我们就能够实现“回调的自动触发”的效果。


     例如:


    我这里有个列表当作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了;