Android~外部类监听器~实现Activity的跳转
2015-10-11 20:06
435 查看
依旧是那个Java学习助手的开发,由于最近又在学习软件的设计模式,所以想将最近学习的简单工厂模式加入进去,个人感觉学习书上的内容不如自己实践。于是我就开始了。
然而问题也随之而来。
在设计的一个Activity中有一组功能比较相近的Button,所以不想对每个Button采用如下的方法:
调整时则出现问题:
则在重新设计类Button_listener时:
而这段代码则错误百出,首先是MainActivity.this肯定是实现不了的。因为不是在当前的Activity中。所以MainActivity是无法识别的。
再者,startActivity()这个方法继承onClickListener是无法使用的。
所以就要对方法进行改进,在网上查了很多如何获取当前运行的Activity的实例的解决方法,以便可以将MainActivity.this处替代。然而没有找到好的解决办法。
后来仔细看doc才知道原来传递的第一个量是个Context,这下问题就简单了。特此写这篇文章记录一下,防止自己忘记。
而当一组Button相近时,不可能写多个onClick()事件,所以,用简单工厂的设计模式,重新设计一个Button_Factory类。
在Button_Listener中这样写就行了:
则对每一个Button都设置改监听器的对象,将其需要的跳转写在Button_Factory中的event_choose()方法中即可解决问题。
这次遇到的问题提醒我,,遇到问题先看看api,看看doc不一定需要到网上求解,只要自己肯钻研,就能解决问题。
然而问题也随之而来。
在设计的一个Activity中有一组功能比较相近的Button,所以不想对每个Button采用如下的方法:
</pre><pre name="code" class="java"><pre name="code" class="java">//btn_click是先前已经注册的Button对象 btn_click.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ //内容 } });
</pre>这样的方式虽然简便,同时直观。但是如果一个Activity中有多个button时,那整个文件将变的冗长,尤其是Button之间之间的功能相差不大时。后又很多的重复代码。这样的程序肯定是不好的。<p></p><p>所以我考虑写一个继承了onClickListener接口的类,来实现OnClick事件。</p><p>调整前代码为:</p><p></p><pre name="code" class="java"><pre name="code" class="java">btn_click.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v){ Intent intent = new Intent(); intent.setClass(MainActivity.this,SecondActivity.class); this.startActivity(intent); } });
调整时则出现问题:
则在重新设计类Button_listener时:
<pre name="code" class="java">public class Button_listener implements View.OnClickListener{ public void onClick(View v){ Intent intent = new Intent(); intent.setClass(MainActivity.this,SecondActivity.class); this.startActivity(intent); } }
而这段代码则错误百出,首先是MainActivity.this肯定是实现不了的。因为不是在当前的Activity中。所以MainActivity是无法识别的。
再者,startActivity()这个方法继承onClickListener是无法使用的。
所以就要对方法进行改进,在网上查了很多如何获取当前运行的Activity的实例的解决方法,以便可以将MainActivity.this处替代。然而没有找到好的解决办法。
后来仔细看doc才知道原来传递的第一个量是个Context,这下问题就简单了。特此写这篇文章记录一下,防止自己忘记。
public class Button_listener implements View.OnClickListener{ private Context context; public Button_listener(Context context){//写个构造函数,在使用时将当前Activity的this传递过来即可实现Intent的跳转。 this.context = context; } public void onClick(View v){ Intent intent = new Intent(); intent.setClass(<span style="color:#ff0000;">context</span>,SecondActivity.class); <span style="color:#ff0000;">context</span>.startActivity(intent);}}
而当一组Button相近时,不可能写多个onClick()事件,所以,用简单工厂的设计模式,重新设计一个Button_Factory类。
public class Button_Factory { private Context context; Button_Factory(Context context){ this.context = context; } //根据点击button的id决定如何进行跳转 public void event_choose(int id){ Intent intent = new Intent(); if(id == R.id.btn_load){ intent.setClass(context,Function_choose.class); } else if(id ==R.id.btn_chapter){ intent.setClass(context,Chapter_choose.class); } else if(id ==R.id.btn_chapter_one_two){ intent.setClass(context,Single_choose_question.class); } context.startActivity(intent); } }
在Button_Listener中这样写就行了:
public class Button_listener implements View.OnClickListener{ private Context context; public Button_listener(Context context){//写个构造函数,在使用时将当前Activity的this传递过来即可实现Intent的跳转。 this.context = context; } public void onClick(View v){ <span style="white-space:pre"> </span>(new Button_Factory(context)).event_choose(v.getId()); } }
则对每一个Button都设置改监听器的对象,将其需要的跳转写在Button_Factory中的event_choose()方法中即可解决问题。
这次遇到的问题提醒我,,遇到问题先看看api,看看doc不一定需要到网上求解,只要自己肯钻研,就能解决问题。
相关文章推荐
- Android应用的四大基本组件介绍
- android学习之1:拍照保存图片
- Android 使用AsyncTaskLoader获取手机联系人
- Android 使用CursorLoader获取手机短信
- android上传图片(及普通参数)到服务器(j2ee后台服务器,ssh框架)
- Android 获取手机的联系人进行操作
- Android 操作软键盘
- Android 容器焦点设置 android:descendantFocusability
- Android数据存储方式之——Shareprefences
- Android按钮跳转页面
- Android Design ItemTouchHelper实现酷炫列表的移行和滑动删除效果
- Android中使用pull解析xml文件
- Android NotificationManager的简单使用
- Android客户端与PC服务器如何实现Socket通信
- Android获取到inflate服务的方式及inflate的解析过程
- Android Paint和Color类介绍
- Android杂谈--ListView之BaseAdapter的使用
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- Android launcher开发介绍
- Android RecyclerView相关简化