这里是MainActivity.java,代码很简单,初始化三个控件,一个是自定义的show,另外两个是系统的,一个edittext,一个button,button设置点击事件,将edittext中的值传入show,并在show中添加textviewimportcom.example.inlisten.Show.IsChangeListener;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.Toast;publicclassMainActivityextendsActivity{privateShowshow;privateEditTextet;privateButtonbtn;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){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(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubshow.addValue(et.getText().toString().trim());et.setText("");}});//4.在mainactivity里面设置ischange方法show.setIsChangeListener(newIsChangeListener(){@OverridepublicvoidisChange(){//TODOAuto-generatedmethodstubToast.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,然后调用ischangelistener里面的ischange方法4.在mainactivity里面设置ischange方法这样就完成了通过回调机制实现了自定义的监听者,关于布局文件很简单,就是一个linearlayout里面增加上面讲的三个控件,没什么说的。注释比较少,不过大部分内容我都写在这上面了,这段实例还是挺简单的。importjava.util.ArrayList;importjava.util.List;importandroid.content.Context;importandroid.util.AttributeSet;importandroid.view.View;importandroid.widget.LinearLayout;importandroid.widget.TextView;publicclassShowextendsLinearLayout{privateContextcontext;privateList<String>array;privateIsChangeListenerisChangeListener;privatebooleanischange=false;publicShow(Contextcontext,AttributeSetattrs){super(context,attrs);//TODOAuto-generatedconstructorstubthis.context=context;array=newArrayList<String>();}publicvoidaddValue(Stringstr){array.add(str);ischange=true;draw();}publicvoiddeleteValue(Stringstr){array.remove(str);ischange=true;draw();}publicvoiddraw(){removeAllViews();for(Stringtext:array){TextViewtv=newTextView(context);tv.setText(text);tv.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){//TODOAuto-generatedmethodstubTextViewt=(TextView)v;deleteValue(t.getText().toString());}});addView(tv);//3.在需要的地方,当然这里就是在draw()方法里检测ischange,然后调用ischangelistener里面的ischange方法if(ischange){isChangeListener.isChange();}}}//1,定义接口IsChangeListener(),里面有一个方法isChange()publicinterfaceIsChangeListener{publicvoidisChange();}//2.定义接口调用方法setIsChangeListener()将ischangelistener传进来publicvoidsetIsChangeListener(IsChangeListenerisChangeListener){this.isChangeListener=isChangeListener;}}


更多相关文章

  1. Android(安卓)如何通过menu id来得到menu item 控件
  2. Android(安卓)4.4以上 根据uri获取路径的方法
  3. Android中的Sqlite数据库操作总结
  4. Android提高之多方向抽屉实现方法
  5. Android(安卓)UI源码解析
  6. Android之MVVM架构指南(二):DataBinding
  7. Android之使用Android-query框架开发实战(二)
  8. android调用系统短信Intent时将预填接收号码和内容
  9. Android进程通信之Messenger&AIDL使用详解

随机推荐

  1. 初学Android之小随笔2--SurfaceView
  2. Android之省市县三级联动
  3. android 程序截图功能
  4. 收集android上开源的酷炫的交互动画和视
  5. wheelView自定义android日期时间选择器
  6. Android检查网络是否连接
  7. android实现异步下载过程
  8. The Saygus VPhone V1 clears FCC, Will
  9. butterknife报错 cannot find method "va
  10. (Android) Eclipse "launching delegate"