实现某个回调自动触发的一个思路
在开发过程中是不是老是想让某个点击事件或者回调方法自动触发,却又无能为力,人家是系统级调用的,我们无法操控;但是又需要实现这样的效果该怎么办呢?
这个问题就要视情况而定了,例如我这里是listview的onItemClick方法的参数,参数分别是 AdapterView<?> parent, View view, int position, long id 第一个参数就是listview本身,第二个参数是被点击的View,第三个就是listview中被点击item的位置,第四个木有用到;我们只要构造出这三个参数就OK了,如果我们的需求不是很过分的话,这三个参数是很容易就构造出来的,我是这样做的:
第二个参数更容易,要让第几个item自动被点击就得到listview的第几个item的View对象;
第三个就是被自动点击的item的位置;
我想到了一个思路,我们可以把回调方法中的语句摘出来构造成一个方法,只要我们能够构造出这个方法所需要的参数,我们就能够实现“回调的自动触发”的效果。
例如:
构造出这些参数,并传给方法;我这里有个列表当作tab,第一个tab为主界面,我的需求是,当在主界面时点击返回键推出程序,当在其他界面点击返回键是调到主界面;要是只是实现这个效果再简单不过了 ,是需要换个界面就行了,关键是我的列表tab被选中时是有效果的,展示内容界面可以换,但是listview的item的选中的效果是点击时才会触发的;这个时候是不是很想在按返回键的时候触发listview的第0个item的点击事件...例如这是我的点击事件里的代码:/*** 初始化监听器*/private void initListener() {menu_function .setOnItemClickListener( new OnItemClickListener() {@Overridepublic 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了,如果我们的需求不是很过分的话,这三个参数是很容易就构造出来的,我是这样做的:
我的listview写在Activity的fragment里,叫menu_function,只要添加一个get方法就很容易获得第一个参数;AdapterView<?> parent = mFrag .getMenu_function();View view = parent.getChildAt(0);int position = 0;mFrag .changeCurrentView(parent, view, position);
第二个参数更容易,要让第几个item自动被点击就得到listview的第几个item的View对象;
第三个就是被自动点击的item的位置;
然后调用该方法就OK了;