当前位置: 首页 > news >正文

西安网站开发公司哪家强ru域名注册

西安网站开发公司哪家强,ru域名注册,南京百度网站推广,网页版微信登陆为什么80%的码农都做不了架构师#xff1f; 可以说ActivityGroup是Google提供的一个非常优秀的API#xff0c;但它需要做稍微复杂的重写才能用起来比较方便#xff0c;本文拟将实现这个稍微复杂的重写。TabActivity作为ActivityGroup唯一的子类却让人大失所望… 为什么80%的码农都做不了架构师    可以说ActivityGroup是Google提供的一个非常优秀的API但它需要做稍微复杂的重写才能用起来比较方便本文拟将实现这个稍微复杂的重写。TabActivity作为ActivityGroup唯一的子类却让人大失所望。   首先来说ActivityGroup的优秀之处以及它的必要性它为开发者提供了一种可能这种可能不将Activity作为屏幕的顶级元素Context呈现而是嵌入到ActivityGroup当中。这是一种极大的飞跃它将场景Context细分化了ActivityGroup是一个主场景而用户可以通过导航按钮来切换想要的子场景。如使用微博功能它是一个相当宏大的场景具有看最新的广播信息、自己发微博、修改资料等子场景用户可以通过按钮来切换到想要的子场景而这个子场景仍活动于主场景之中。让一个主场景能拥有多个逻辑处理模块主场景不再负责子场景逻辑主场景只负责切换场景的逻辑即每一个Activity子场景拥有一个逻辑处理模块一个ActivityGroup有多个Activity却不干预Activity的逻辑这无疑细分化和模块化了逻辑代码。ActivityGroup和它将要内嵌的Activity所要实现的功能完全可以用只一个Activity来完成你可以试想当你把一个ActivityGroup和它所拥有的Activity的逻辑代码放在一个Activity中时那这个Activity会拥有多少行代码为维护带来非常的不便。   再来说说TabActivity的不足之处首先TabActivity自己独有的视图几乎没人使用也就是难看的标签页按钮形式国内开发者用到的特性几乎都是从ActivityGroup继承下来的。还有就是TabActivity的强制依赖关系它的布局文件必须将TabHost作根标签并且id必须为android:id/tabhost必须有TabWidget标签且它的id必须是android:id/tabs还有加载Activity的View容器id必须为android:id/tabcontent。光是强制依赖关系我就觉得不是很舒服。不仅仅是TabActivity在一些特殊的Activity中如ListActivity都存在这种强制依赖关系ListActivity必须有id为xxx想不起来了的ListView我想这些弊端应该获得Google开发者的重视。   那么我下面我就将自己实现ActivityGroup告别强制依赖关系并随心所欲的建立视图。下面这个类是一个抽象类开发者只需对这个抽象类稍做修改并加以实现自己的视图就能告别TabActivity。 package com.chenjun.demo.abstracttabactivity;import android.app.Activity; import android.app.ActivityGroup; import android.app.LocalActivityManager; import android.content.Intent; import android.os.Bundle; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.RadioButton; /** * 自己实现的一个通用ActivityGroup。 * 可以通过简单的重写它来制作有导航按钮和用导航按钮控制动态加载Activity的ActivityGroup。 * 开发者需要在实现类中实现三个方法 * 1.指定动态加载Activity的容器的对象getContainer()方法。 * 2.初始化所有的导航按钮initRadioBtns()方法开发者要遍历所有的导航按钮并执行initRadioBtn(int id)方法。 * 3.实现导航按钮动作监听器的具体方法onCheckedChanged(...)方法。这个方法将实现某个导航按钮与要启动对应的Activity的关联关系可以调用setContainerView(...)方法。 * author zet * */ public abstract class AbstractMyActivityGroup extends ActivityGroup implements CompoundButton.OnCheckedChangeListener{Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);initRadioBtns();} //加载Activity的View容器容器应该是ViewGroup的子类 private ViewGroup container; private LocalActivityManager localActivityManager; /** * 加载Activity的View容器的id并不是固定的将命名规则交给开发者 * 开发者可以在布局文件中自定义其id通过重写这个方法获得这个View容器的对象 * return */ abstract protected ViewGroup getContainer(); /** * 供实现类调用根据导航按钮id初始化按钮 * param id */ protected void initRadioBtn(int id){RadioButton btn (RadioButton) findViewById(id);btn.setOnCheckedChangeListener(this);} /** * 开发者必须重写这个方法来遍历并初始化所有的导航按钮 */ abstract protected void initRadioBtns(); /** * 为启动Activity初始化Intent信息 * param cls * return */ private Intent initIntent(Class? cls){ return new Intent(this, cls).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);} /** * 供开发者在实现类中调用能将Activity容器内的Activity移除再将指定的某个Activity加入 * param activityName 加载的Activity在localActivityManager中的名字 * param activityClassTye 要加载Activity的类型 */ protected void setContainerView(String activityName, Class? activityClassTye){ if(null localActivityManager){localActivityManager getLocalActivityManager();} if(null container){container getContainer();} //移除内容部分全部的View container.removeAllViews();Activity contentActivity localActivityManager.getActivity(activityName); if (null contentActivity) {localActivityManager.startActivity(activityName, initIntent(activityClassTye));} //加载Activity container.addView(localActivityManager.getActivity(activityName).getWindow().getDecorView(), new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));}} 需要重写的方法以及为什么需要重写我都已在原代码中标明。下面我们来具体的实现这个类来达到我们想要的预期。 package com.chenjun.demo.abstracttabactivity;import android.os.Bundle; import android.view.ViewGroup; import android.widget.CompoundButton; import android.widget.RadioButton; public class TestMyActivityGroup extends AbstractMyActivityGroup{ //加载的Activity的名字LocalActivityManager就是通过这些名字来查找对应的Activity的。 private static final String CONTENT_ACTIVITY_NAME_0 contentActivity0; private static final String CONTENT_ACTIVITY_NAME_1 contentActivity1; private static final String CONTENT_ACTIVITY_NAME_2 contentActivity2; private static final String CONTENT_ACTIVITY_NAME_3 contentActivity3; private static final String CONTENT_ACTIVITY_NAME_4 contentActivity4;Override protected void onCreate(Bundle savedInstanceState) {setContentView(R.layout.my_activity_group);super.onCreate(savedInstanceState);((RadioButton)findViewById(R.id.radio_button0)).setChecked(true);} /** * 找到自定义id的加载Activity的View */ Override protected ViewGroup getContainer() { return (ViewGroup) findViewById(R.id.container);} /** * 初始化按钮 */ Override protected void initRadioBtns() {initRadioBtn(R.id.radio_button0);initRadioBtn(R.id.radio_button1);initRadioBtn(R.id.radio_button2);initRadioBtn(R.id.radio_button3);initRadioBtn(R.id.radio_button4);} /** * 导航按钮被点击时具体发生的变化 */ Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { switch (buttonView.getId()) { case R.id.radio_button0:setContainerView(CONTENT_ACTIVITY_NAME_0, ContentActivity0.class); break; case R.id.radio_button1:setContainerView(CONTENT_ACTIVITY_NAME_1, ContentActivity1.class); break; case R.id.radio_button2:setContainerView(CONTENT_ACTIVITY_NAME_2, ContentActivity2.class); break; case R.id.radio_button3:setContainerView(CONTENT_ACTIVITY_NAME_3, ContentActivity3.class); break; case R.id.radio_button4:setContainerView(CONTENT_ACTIVITY_NAME_4, ContentActivity4.class); break; default: break;}}}} 布局文件 ?xml version1.0 encodingutf-8? LinearLayout android:layout_widthfill_parent android:layout_heightfill_parent android:layout_marginTop0.0px xmlns:androidhttp://schemas.android.com/apk/res/android LinearLayout android:orientationvertical android:layout_widthfill_parent android:layout_heightfill_parent LinearLayout android:idid/container android:layout_widthfill_parent android:layout_height0.0dip android:layout_weight1.0 / RadioGroup android:gravitycenter_vertical android:layout_gravitybottom android:orientationhorizontal android:layout_widthfill_parent android:layout_heightwrap_content RadioButton android:idid/radio_button0 android:layout_marginTop2.0dip android:text按钮1 stylestyle/tab_radio android:drawableTopandroid:drawable/ic_menu_call / RadioButton android:idid/radio_button1 android:layout_marginTop2.0dip android:text按钮2 stylestyle/tab_radio android:drawableTopandroid:drawable/ic_menu_camera / RadioButton android:idid/radio_button2 android:layout_marginTop2.0dip android:text按钮3 stylestyle/tab_radio android:drawableTopandroid:drawable/ic_menu_agenda / RadioButton android:idid/radio_button3 android:layout_marginTop2.0dip android:text按钮4 stylestyle/tab_radio android:drawableTopandroid:drawable/ic_menu_delete / RadioButton android:idid/radio_button4 android:layout_marginTop2.0dip android:text按钮5 stylestyle/tab_radio android:drawableTopandroid:drawable/ic_menu_help / /RadioGroup /LinearLayout /LinearLayout 具体的实现效果(这里Activity基本没有内容): 具体的代码演示就差不多了这里要做一些说明的   1.开发者在自己的实现类中的onCreate方法中必须先设置视图再调用super.oncreate(...)方法。具体为什么看了抽象类的源代码我相信读者应该会明白。   2.关于导航按钮使用RadioButton。Android没有特意为我们定制适合我们在这种场合下使用的按钮也就是上面可以设置简笔画下面有文字说明。解决方案1)使用ImageButton将简笔画和文字说明P在一张图片里面但这样有一个非常明显的弊端文字说明的文字字体是固定的是P在图片里的那么不和系统的文字一样。如果用户使用一些比较花哨的系统文字而导航按钮却是宋体在上面的内容部分是他的系统文字那么我很难想象他下一次是否还会打开您所开发的应用。2)自己去实现一个View去代替RadioButton出于学习目的这是好的。最佳的解决方案我还是认为是用RadioButton只需对它稍做修改即可具体可以参照新浪微博的资源文件。   缺陷反思这些代码都是我从重构得来的当时开发的时候并没有设计好开发流程我是先有那个实现类才有了那个抽象类的。自己写的ActivityGroup与TabActivity相比优点显而易见缺点就是可能不稳定但暂时没有发现Bug动态加载的Activity的逻辑代码都能正确执行。 转载于:https://my.oschina.net/mingxv/blog/123583
http://www.sadfv.cn/news/375814/

相关文章:

  • 长沙seo袁飞seo服务的内容
  • 大气企业响应式网站做网站可以没有框架吗
  • 外贸电子网站做网站报价明细表
  • 局域网站建设想做网站策划怎么做
  • 公司网站被侵权在中国做网站网站违法吗
  • 做资讯类网站大型网站seo策略
  • 河南建设网站制作WordPress的king免费
  • 网页设计网站建设过程报告同城网
  • 提供手机自适应网站龙岩网上房地产
  • 龙采网站建设做网站关键词加到什么位置
  • 网站建设负责传资料不广告网站有哪些
  • 网站建设 汇卓网站秒收录工具
  • 专门做软陶的网站做网站的软件淘汰史
  • 网站的seo方案怎么做php儿童摄影网站源码
  • asp.net网站安装顺序房屋租赁网站建设管理
  • 电子商务的网站建设要求步骤学做网站论
  • 广州做网站哪家好公司ui设计学校
  • 三点水网站建设合同书唐山万唯网络科技有限公司
  • 找别人做网站百度热点排行榜
  • 搬瓦工做网站稳定吗中国最牛的央企排名
  • 从什么网站找做app的代码上海最新注册企业
  • 天行健公司网站建设下载莱芜都市网app
  • 响应式网站图解西安市建设工程信息网工程交易平台官网
  • 网站后期维护费用怎样版费域名注册后怎么建设网站
  • p2p网站建设费用建设项目竣工验收公示网站
  • dedecms网站别名解析建设网站具体的步骤
  • 吴江网站制作公司aso优化排名
  • 网站建设分金手指专业十四网店代运营有哪些
  • 网站注册信息查询试客网站建设
  • 网站推广方案书犀牛云做网站如何