博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现某个回调自动触发的一个思路
阅读量:5889 次
发布时间:2019-06-19

本文共 2541 字,大约阅读时间需要 8 分钟。

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

 

转载地址:http://akfsx.baihongyu.com/

你可能感兴趣的文章
搭建SpringMVC开发环境
查看>>
二叉树的镜像
查看>>
HTTP 报文详解
查看>>
Active Directory 基础回顾 (一) 如何理解group的类型
查看>>
awk和sed字符串处理速度比较与处理速度的测试方法
查看>>
项目管理修炼之道之把握项目的节奏
查看>>
Android Studio打包.so文件教程
查看>>
Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)
查看>>
windows下安装emacs及添加配置文件(网络整合收集)
查看>>
maven环境的搭建
查看>>
几个比喻让你彻底明白什么是HTML5
查看>>
Linux基础环境准备
查看>>
JS调用agent的方法
查看>>
4、Bash基础及配置、标准I/O、管道及shell编程基础;
查看>>
综合技术 --mybatis-config.xml文件
查看>>
Java的缓冲流内部实现及其效率探讨
查看>>
mysql+mycat实现读写分离
查看>>
http协议特点,web资源,url通用格式
查看>>
学习安卓开发[1] - 程序结构、Activity生命周期及页面通信
查看>>
安装和卸载软件包
查看>>