初涉android中的回调机制

今天用到了android中的回调机制,简单写一下学习心得。我运用回调机制为了给一个自定义控件添加一个自定义监听者,使其达到想要的目的。我先简单说一下下面的代码达到的效果。show.java继承linearlayout,可以在里面动态添加删除textview,设置一个内容改变监听者IsChangeListener来监听show里面的值是否改变,从而在mainactivity中更改ui。

这里是MainActivity.java,代码很简单,初始化三个控件,一个是自定义的show,另外两个是系统的,一个edittext,
一个button,button设置点击事件,将edittext中的值传入show,并在show中添加textview
 
import  com.example.inlisten.Show.IsChangeListener;
 
import  android.app.Activity;
import  android.os.Bundle;
import  android.view.Menu;
import  android.view.MenuItem;
import  android.view.View;
import  android.view.View.OnClickListener;
import  android.widget.Button;
import  android.widget.EditText;
import  android.widget.Toast;
 
public  class  MainActivity  extends  Activity {
     private  Show show;
     private  EditText et;
     private  Button btn;
     @Override
     protected  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         
         show = (Show) findViewById(R.id.show);
         et = (EditText) findViewById(R.id.et);
         btn = (Button) findViewById(R.id.btn);
         
         btn.setOnClickListener( new  OnClickListener() {
             
             @Override
             public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                 show.addValue(et.getText().toString().trim());
                 et.setText( "" );
             }
         });
         //4. 在mainactivity里面设置ischange方法
         show.setIsChangeListener( new  IsChangeListener() {
             
             @Override
             public  void  isChange() {
                 // TODO Auto-generated method stub
                 Toast.makeText(MainActivity. this "ischange" , Toast.LENGTH_SHORT).show();
                 
             }
         });
     }
 
 
}
 
----------------------------------------------------------------------------------------------
 
这里是show.java,通过addvalue()来讲上面edittext的值加入到arraylist中,通过draw()绘制,遍历arraylist,
增加textview,delete()同理,设置布尔型ischange来判断arraylist是否改变,接下来就是回调机制了,主要有如下几
步:
1. 定义接口IsChangeListener(),里面有一个方法isChange() 
2. 定义接口调用方法setIsChangeListener() 将ischangelistener传进来  
3. 在需要的地方,当然这里就是在draw()方法里检测ischange,然后调用ischangelist ener里面的ischange方法   
4. 在mainactivity里面设置ischange方法   这样就完成了通过回调机制实现了自定义的 监听者,关于布局文件很简单,就是一个linearlayout里面增加上面讲的三个控件,没什么说的。注释比较少,不过大部分 内容我都写在这上面了,这段实例还是挺简单的。
 
import  java.util.ArrayList;
import  java.util.List;
 
import  android.content.Context;
import  android.util.AttributeSet;
import  android.view.View;
import  android.widget.LinearLayout;
import  android.widget.TextView;
 
public  class  Show  extends  LinearLayout {
     private  Context context;
     private  List<String> array;
     private  IsChangeListener isChangeListener;
     private  boolean  ischange =  false ;
 
     public  Show(Context context, AttributeSet attrs) {
         super (context, attrs);
         // TODO Auto-generated constructor stub
         this .context = context;
         array =  new  ArrayList<String>();
     }
     
     public  void  addValue(String str){
         array.add(str);
         ischange =  true ;
         draw();
 
     }
     
     public  void  deleteValue(String str){
         array.remove(str);
         ischange =  true ;
         draw();
     }
     
     public  void  draw(){
         removeAllViews();
         for (String text : array){
             TextView tv =  new  TextView(context);
             tv.setText(text);
             tv.setOnClickListener( new  OnClickListener() {
                 
                 @Override
                 public  void  onClick(View v) {
                     // TODO Auto-generated method stub
                     TextView t = (TextView) v;
                     deleteValue(t.getText().toString());
                 }
             });
             addView(tv);
             //3. 在需要的地方,当然这里就是在draw()方法里检测ischange,然后调用ischangelistener里面的ischange方法
             if (ischange){
                 isChangeListener.isChange();
             }
             
         }
     }
     //1,定义接口IsChangeListener(),里面有一个方法isChange()
     public  interface  IsChangeListener{
         public  void  isChange();
     }
     //2.定义接口调用方法setIsChangeListener()将ischangelistener传进来
     public  void  setIsChangeListener(IsChangeListener isChangeListener){
         this .isChangeListener = isChangeListener;
     }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值