Android学习笔记の二

Android学习笔记の二


Activity之间的数据传递

大家都知道在Activity之间跳转要用Intent,那么向下一个活动传递信息就可以这样写:

button1.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String data = "Hello SecondActivity";
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                intent.putExtra("Extra data", data);
                startActivity(intent);
            }

        });

这样就完成了数据的发送。(现在知道上一篇的button 1是干啥的了吧~
putExtra 第一个参数是键值,第二个参数是我们传递的数据。
然后我们在新建一个SecondActivity来接受数据,代码这样写:(千万不要心急,别忘了注册Activity哟:))

public class SecondActivity extends Activity{

    public static final String TAG = "SecondActivity"; 
    protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.second_layout);
        Button button2 = (Button)findViewById(R.id.button_2);
        Intent intent = getIntent();
        String data = intent.getStringExtra("Extra data");
        Log.d(TAG, data);
    }
}

我们用getIntent方法获取启动SecondActivity的Intent,用getStringExtra获取传递的内容,它的参数是数据的键值
我们把Log打出来,试一下程序

我们看到数据在SecondActivity被成功地打印出来了。

既然可以向下一个Activity传递数据,那么就一定可以回传数据!
先改FristActivity的代码

button1.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String data = "Hello SecondActivity";
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                intent.putExtra("Extra data", data);
                startActivityForResult(intent, 1);
            }

        });

startActivityForResult从字面上就可以看出这个不是一般的跳转,而是需要返回结果的跳转!“1”是请求码,因为一个Activity可能能跳转到多个Activity并且都会返回结果。这时候就通过请求码来判断是哪个Activity返回的结果。
那么既然如此就一定要有接收结果的函数

protected void onActivityResult(int requestCode, int resultCode, Intent data){
        switch (requestCode) {
        case 1:
            if(resultCode == RESULT_OK){
                String returnedData = data.getStringExtra("return data");
                Log.d(TAG, returnedData);
            }
            break;
        default:
        }
    }

再在SecondActivity中添加如下代码:

button2.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent();
                intent.putExtra("return data", "Hi FirstActivity");
                setResult(RESULT_OK, intent);
                finish();
            }

        });

当然,你仔细一想发现如果在SecondActivity按返回键也能返回FristActivity,但是这时不就没法传数据了吗?于是,为了解决这个问题,我们添加如下代码

public void onBackPressed(){
        Intent intent = new Intent();
        intent.putExtra("return data", "Hi FirstActivity");
        setResult(RESULT_OK, intent);
        finish();
    }

当用户按下返回键就会执行OnBackPressed的代码
我是已经成功了,这里就不给大家贴图了,大家自己试一下吧~

Android开发小技巧

知晓当前在那个Activity

因为在开发中,一个项目的代码不可能都是你写的。当你阅读别人得到代码时可能就会因为找不到对应的Activity而头大了,so这个技巧就是来帮你解决这个困扰。
我们先键一个BaseActivity

public class BaseActivity extends Activity{

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        Log.d("BaseActovity", getClass().getSimpleName());
    }
}

然后我们让FirstActivity和SecondActivity都继承BaseActivity
Android学习笔记の二_第1张图片

随时退出程序

当我们打开过多的Activity时,退出程序就变得非常困难,要按N次back键才能退出。我们需要一个可以随时退出程序的解决方案——实现一个Activity管理器!
我们新建一个ActivityCollector类:

public class ActivityCollector {

    public static List activities = new ArrayList();

    public static void addActivity(Activity activity){
        activities.add(activity);
    }

    public static void removeActivity(Activity activity){
        activities.remove(activity);
    }

    public static void finishAll(){
        for(Activity activity : activities){
            if(!activity.isFinishing())
                activity.finish();
        }
    }
}

用list管理活动,addActivity添加一个活动,removeActivity删除一个活动,finishAll讲活动全部销毁。
再来修改BaseActivity

public class BaseActivity extends Activity{

    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        Log.d("BaseActovity", getClass().getSimpleName());
        ActivityCollector.addActivity(this);
    }

    protected void onDestroy(){
        super.onDestroy();
        ActivityCollector.removeActivity(this);
    }
}

再把给SecondActivity加一个button,用于销毁所有Activity

button22.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                ActivityCollector.finishAll();
            }

        });

启动活动的最佳写法

这个也是用于和别人合作项目的时候。
1.你和别人分写两个Activity
2.这两个Activity之间要传递数据
如果满足这两条,请使用下面的方法:
在SecondActivity中添加如下代码:

public static void actionStart(Context context, String data1, String data2){
        Intent intent = new Intent(context, SecondActivity.class);
        intent.putExtra("param1", data1);
        intent.putExtra("param2", data2);
        context.startActivity(intent);
    }

这里表示要穿两个数据到SecondActivity。
然后修改FirstActivity

button1.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
            SecondActivity.actionStart(FirstActivity.this, "data1", "data2");
            }   
        });

好习惯早养成~给每个Activity都写一个这样的方法,方便自己,方便他人<( ̄︶ ̄)/ 

你可能感兴趣的:(android)