学而实习之 不亦乐乎

Android:开发小技巧

2021-09-17 11:13:55

1.获取当前活动是那一个

当你接手一份别人写的代码,阅读别人的代码时有一个很头疼的问题,就是你需要在某个界面上修改一些非常简单的东西,但是你半天找不到这个界面对应的活动是哪一个。那要怎么办呢?

首先需要新建一个 BaseActivity 继承自 Activity,然后在 BaseActivity 中重写 onCreate()方法,如下所示:

public class BaseActivity extends Activity {

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

我们在 onCreate()方法中获取了当前实例的类名,并通过 Log 打印了出来。 接下来我们需要让 BaseActivity 成为 ActivityTest 项目中所有活动的父类。让它们不再继承自 Activity,而是 继承自 BaseActivity。虽然项目中的活动不再直接继承自 Activity 了,但是它们仍然完全继 承了 Activity 中的所有特性。

运行程序,观察 LogCat 中的打印信息。现在每当我们进入到一个活动的界面,该活动的类名就会被打印出来,这样我们就可以知晓当前界面对应的是哪一个活动了。

2.启动活动的最佳方法

启动活动也就是构建出当前的意图(Intent),然后调用startActivity()或startActivityForResult()方法将活动启动起来,如果有数据需要从一个活动传递到另一个活动,也可以借助Intent来完成。

所以通常是下面的写法:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("param1","data1");
intent.putExtra("param2","data2");
startActivity(intent);

这是完全正确的, 但在开发中经常有对接的问题出现,比如SecondActivity不是自己开发的,你负责的部分需要启动 SecondActivity 这个功能.而你不清楚启动这个活动需要传递哪些数据,这时你要么去阅读 SecondActivity 中的代码,要么问编写 SecondActivity 的同事。

只需要换一种写法,如下:

public class SecondActivity extends BaseActivity{

       public static void actonStart(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中添加了一个actionStart()方法,所有SecondActivity中需要的数据都是通过actionStart()方法中的参数传递过来的,然后再把它们存储到Intent中,最后调用startActivity()方法启动SecondActivity.

这样写的好处是,SecondActivity所需要的数据在方法参数中全部体现出来,不用阅读SecondActivity中的代码,也能知道启动SecondActivity需要传递哪些数据.

简化启动活动的代码

public void onClick(View v){
    SecondActivity.actionStart(FirstActivity.this,"data1","data2");
}

养成一个习惯,给每个编写的活动都添加类似的启动方法.