当前位置:  编程技术>移动开发
本页文章导读:
    ▪施用ActivityGroup来切换Activity和Layout        使用ActivityGroup来切换Activity和Layout 前言   在一个主界面中做Activity切换一般都会用TabActivity,使用方便,Activity互相之间相对独立,但是可定制性不强,而且修改起来很麻烦。当然也可.........
    ▪ onNewIntent调用火候        onNewIntent调用时机 在IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestroy  onNewIntent一、其他应用发Intent,执行下列方法:I/@@@philn(12410): onCreateI/@@@philn(12410): onStartI/.........
    ▪ 作为自由职业者,您必须知道的20个赢利原则       作为自由职业者,你必须知道的20个赢利原则 "你如何盈利?" 如果你是自由职业者,你一定会被别人这样问道过。你也许不知道这该如何回答,或者你不好意思说出你的报价。这是因为对自.........

[1]施用ActivityGroup来切换Activity和Layout
    来源: 互联网  发布时间: 2014-02-18
使用ActivityGroup来切换Activity和Layout
前言

   在一个主界面中做Activity切换一般都会用TabActivity,使用方便,Activity互相之间相对独立,但是可定制性不强,而且修改起来很麻烦。当然也可以把layout分开,把逻辑代码全写在主界面的逻辑代码中,但是很明显可维护性相当差,这里通过ActivityGroup来解决这个问题。






声明

  欢迎转载,但请保留文章原始出处:)

    博客园:http://www.cnblogs.com

    农民伯伯: http://www.cnblogs.com/over140/




文章

  1.  Android: TabActivity Nested Activities

  2.  Android ActivityGroup的使用代码将子activty 的layout加入到主activity中



正文

  一、效果图

    


    要求点击底部不同图片按钮切换不同的Activity,并在中间显示Activity对应的ContentView。




  二、 实现代码


    2.1  layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent" android:orientation="vertical"
    android:layout_height="fill_parent">
    <LinearLayout android:gravity="center_horizontal"
        android:background="@drawable/myinfor2" android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <TextView android:id="@+id/cust_title" android:textColor="@android:color/white"
            android:textSize="28sp" android:text="模块1" android:layout_width="wrap_content"
            android:layout_height="wrap_content"></TextView>
    </LinearLayout>
    <!-- 中间动态加载View -->
    <ScrollView android:measureAllChildren="true" android:id="@+id/containerBody"
        android:layout_weight="1" android:layout_height="fill_parent"
        android:layout_width="fill_parent">
    </ScrollView>
    <LinearLayout android:background="@android:color/black"
        android:layout_gravity="bottom" android:orientation="horizontal"
        android:layout_width="fill_parent" android:layout_height="wrap_content">
        <!-- 功能模块按钮1 -->
        <ImageView android:id="@+id/btnModule1" android:src="/blog_article/@android_drawable/ic_dialog_dialer/index.html"
            android:layout_marginLeft="7dp" android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp" android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <!-- 功能模块按钮2 -->
        <ImageView android:id="@+id/btnModule2" android:src="/blog_article/@android_drawable/ic_dialog_info/index.html"
            android:layout_marginLeft="7dp" android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp" android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <!-- 功能模块按钮3 -->
        <ImageView android:id="@+id/btnModule3" android:src="/blog_article/@android_drawable/ic_dialog_alert/index.html"
            android:layout_marginLeft="7dp" android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp" android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
</LinearLayout>

复制代码
    2.2  TestView.java

/**
 * 使用ActivityGroup来切换Activity和Layout
 * @author 农民伯伯
 * @version 2010-9-7
 * 
 */
public class TestView extends ActivityGroup {

    private ScrollView container = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 隐藏标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        // 设置视图
        setContentView(R.layout.layout);

        container = (ScrollView) findViewById(R.id.containerBody);

        // 模块1
        ImageView btnModule1 = (ImageView) findViewById(R.id.btnModule1);
        btnModule1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                container.removeAllViews();
                container.addView(getLocalActivityManager().startActivity(
                        "Module1",
                        new Intent(TestView.this, ModuleView1.class)
                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                        .getDecorView());
            }
        });

        // 模块2
        ImageView btnModule2 = (ImageView) findViewById(R.id.btnModule2);
        btnModule2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                container.removeAllViews();
                container.addView(getLocalActivityManager().startActivity(
                        "Module2",
                        new Intent(TestView.this, ModuleView2.class)
                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                        .getDecorView());
            }
        });

        // 模块3
        ImageView btnModule3 = (ImageView) findViewById(R.id.btnModule3);
        btnModule3.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                container.removeAllViews();
                container.addView(getLocalActivityManager().startActivity(
                        "Module3",
                        new Intent(TestView.this, ModuleView3.class)
                                .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
                        .getDecorView());
            }
        });
    }
}

复制代码
    代码说明:

      a).  ModuleView1、ModuleView2、 ModuleView3分别继承自Activity。

      b).  想动态改变标题可以通过cust_title获取TextView进行设置。

  

结束



    
[2] onNewIntent调用火候
    来源: 互联网  发布时间: 2014-02-18
onNewIntent调用时机

在IntentActivity中重写下列方法:onCreate onStart onRestart  onResume  onPause onStop onDestroy  onNewIntent
一、其他应用发Intent,执行下列方法:
I/@@@philn(12410): onCreate
I/@@@philn(12410): onStart
I/@@@philn(12410): onResume

发Intent的方法:
Uri uri = Uri.parse("philn://blog.163.com");
Intent it = new Intent(Intent.ACTION_VIEW, uri);    
startActivity(it);

二、接收Intent声明:
 <activity android:name=".IntentActivity" android:launchMode="singleTask"
                  android:label="@string/testname">
             <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="philn"/>
            </intent-filter>
  </activity>

三、如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于
I/@@@philn(12410): onPause
I/@@@philn(12410): onStop 状态的话
其他应用再发送Intent的话,执行顺序为:
I/@@@philn(12410): onNewIntent
I/@@@philn(12410): onRestart
I/@@@philn(12410): onStart
I/@@@philn(12410): onResume

 

在Android应用程序开发的时候,从一个Activity启动另一个Activity并传递一些数据到新的Activity上非常简单,但是当您需要让后台运行的Activity回到前台并传递一些数据可能就会存在一点点小问题。

首先,在默认情况下,当您通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统都会创建一个新的Activity实例并显示出来。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置activity的加载方式(launchMode)以实现单任务模式,如下所示:


1 <activity android:label="@string/app_name" android:launchmode="singleTask"android:name="Activity1">

2 </activity>


launchMode为singleTask的时候,通过Intent启到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候,系统就不会再调用通常情况下我们处理请求数据的onCreate方法,而是调用onNewIntent方法,如下所示:


1 protected void onNewIntent(Intent intent) {

2   super.onNewIntent(intent);

3   setIntent(intent);//must store the new intent unless getIntent() will return the old one

4   processExtraData();

5 }


不要忘记,系统可能会随时杀掉后台运行的Activity,如果这一切发生,那么系统就会调用onCreate方法,而不调用onNewIntent方法,一个好的解决方法就是在onCreate和onNewIntent方法中调用同一个处理数据的方法,如下所示:


01 public void onCreate(Bundle savedInstanceState) {

02   super.onCreate(savedInstanceState);

03   setContentView(R.layout.main);

04   processExtraData();

05 }

06  

07 protected void onNewIntent(Intent intent) {

08   super.onNewIntent(intent);

09   setIntent(intent);//must store the new intent unless getIntent() will return the old one

10   processExtraData()

11 }

12  

13 private void processExtraData(){

14   Intent intent = getIntent();

15   //use the data received here

16 }


    
[3] 作为自由职业者,您必须知道的20个赢利原则
    来源: 互联网  发布时间: 2014-02-18
作为自由职业者,你必须知道的20个赢利原则
"你如何盈利?"
如果你是自由职业者,你一定会被别人这样问道过。你也许不知道这该如何回答,或者你不好意思说出你的报价。这是因为对自由职业者提供的服务进行定价本身就是一个圈内人士必须面对的一个恼火问题。

给自由职业者的服务进行定价本身就是一个仁者见仁智者见智的问题。这篇文章和以前不同,你这次将能找到给自由职业者提供的服务的20种不同的服务定价的原则,而不仅仅只是其中一种。你当然无需记住所有,但以我的经验,这些东西非常有用。


定价原则:
你是否曾今为你给客户提供服务进行定价时感到无从下手?那好,当你下次为你的工作服务进行定价时请考虑下面这个清单提供的定价原则吧。
1,基于服务的质量而不是数量来进行定价 -- 如果你进行大量的简单工作的话,你只能获取一点点报酬而且还落得个精疲力尽的后果。所以你应该集中精力去完成高质量的工作来获取更高的报酬。

2,你的定价应该高于你的花费并且最好有些利润 -- 这是显而易见的道理,很多自由职业者以前并没有进行过商业活动。他们并不考虑到将来的赢利。请确保要考虑到会超出你预算的可能。

3,定期更改你的定价 -- 你现在的收费还和去年一样吗?你越长时间不去提升你服务的价格,那么你就越有可能出现财政赤字。另外,你还要想到现在的你可比去年那时候有经验多了,也更应该值更多的价钱。

4,定价应该基于现在的工作,而不是未来的承诺 -- 经常会有些这样的客户联系我,希望我能给个较低的价格并且向我承诺以后能给我更多的活干。然而,如果他们不与你在未来的这个约定上签订正式官方协定的话,请不要相信他们。

5,在你知道整个项目工作范围之前不要为这个项目进行定价 -- 你需要知道在你给这项工程进行定价之前必须了解到你所面对的工作量。所以你必须事先了解整个项目的范围。工作范围陷阱就是自由职业者经常面对的问题,所以请牢记这一点。

6,更多工作就应该拿到更多的报酬 -- 如果客户在于你确认交易价格后还添加了更多的任务,那么你应该也相应提高定价。我们最好尽早跟客户说明这一点。否则,你会发现你获取的报酬低于了你的预期。

7,免费的工作意味着没有报酬 -- 也许偶尔有人希望你捐献出你的工作服务。这一般可能是来自慈善机构或者朋友或者家人的请求。碰到这种情况时,请好好考虑下。因为免费的代价就是你没有任何的报酬。

8,不要为现金以外的事物工作 -- 很多时候我们可以看到客户以项目未来前景的诱惑希望自由职业者免费为他们工作,或者以股票期权的方式与自由职业者进行协商讨论。或许有些自由职业者会看重股票期权,但请记住,只有现金才能支付你明天要还的账单。

9,你的定价是你的准则 -- 请记住你的定价是你的准则。你是个自由职业者,所以你也是完全自由的。如果你感觉这个工程难度太大,你完全能够提升你的定价来回报你的更多努力。

10,不要去猜价格 -- 注意有些客户会在你知道项目详细情况前会给出一个大概的价格,那么也请你小心,不要在完全了解工程细节的情况下去签订固定的报价。

11,去了解你的竞争对手在你这个工作领域的定价 -- 作为自由职业者,你应该了解竞争对手他们给出的定价。这些你能通过查询专业组织的调查结果或者直接去竞争对手的网站上查询。

12,理解价格包装 -- 请将你的服务细分拆开并分别定价,这样也能更加让客户觉得像个正规的商业交易。

13,必须考虑工程项目的时长 -- 你也许会碰到一个潜在的客户需要你去用5年的时间去完成一项任务,如果你一开始没有提出你的要求的话,这样的情况是有可能碰到的。

14,为滞纳金进行收费 -- 你与客户的合约应该包含关于滞纳金的条款。很多服务公司对于客户没能及时付款的行为都收取滞纳金。所以这里也请记住,在你作为自由职业者的同时,你也是一个小公司的老板。

15,对客户需要加急的任务进行更多收费 -- 你是否碰到过那种客户需要你在极短时间内完成的任务呢?一般来说我不建议你去接这样的任务,如果你已经接下这个任务,那么请加价,并且让客户知道这个任务现在已经是你当前最优先处理的。

16,低价格并不意味着更多的客户 -- 在自由职业者圈子里有个常识就是更低的价格能带来更多的客户。实际上这个不完全正确。想想如果你的价格定的过低,客户可能会认为你根本就没有能完成他们目标任务的能力。

17,如果你的客户对你说你的价格太低了,那么实际上 -- 如果客户都对你说这些话了,那么这就是你需要提升定价的明显信号。请相信他们并且提升定价。

18,跟踪你的工作时间来了解你的真实报酬 -- 如果你不跟踪你的时间,那你该如何了解到每小时赚了多少钱呢?幸运的是网络上已经有很多现成的时间跟踪工具来让你下载使用。

19,当客户对你的价格觉得过高而拒绝时请不要沮丧 -- 我知道客户因为价格原因拒绝与你合作是个不令人舒服的事情,但是请坚持你的定价,这能为你带来更好的客户。

20,理解何时该用时间计费,何时该用项目计费 -- 对于自由职业者来说,时间计费 vs 项目计费一直都是一个很有争议的话题,这个在实际使用上请根据你的工作类型来决定。

轮到你了
我希望这篇文章已经解决了自由职业定价的问题。我在想是否还错过了哪些关键性原则呢?

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
.net/c#/asp.net iis7站长之家
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3