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