初涉android中的回调机制
16lz
2021-01-26
这里是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;}}
更多相关文章
- Android(安卓)如何通过menu id来得到menu item 控件
- Android(安卓)4.4以上 根据uri获取路径的方法
- Android中的Sqlite数据库操作总结
- Android提高之多方向抽屉实现方法
- Android(安卓)UI源码解析
- Android之MVVM架构指南(二):DataBinding
- Android之使用Android-query框架开发实战(二)
- android调用系统短信Intent时将预填接收号码和内容
- Android进程通信之Messenger&AIDL使用详解