Android Studio 单刷《第一行代码》系列 03 —— Activity 基础

前情提要(Previously)

本系列将使用 Android Studio 将《第一行代码》(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Android Studio 做为开发 IDE 的同窗开路。
PS:其实我就是现学现卖,但愿我能坚持刷完。html

在 Day 一、Day 2,咱们建立了第一个App project,并分析了项目结构、运行原理,实践了 LogCat 的使用。java

系列目录在此:android

摘要(Abstract)

Activity 是 一个 App 的脸面,而这又是一个看脸的世界,那就让咱们从脸开始吧。这篇都是基础的罗列,没有什么值得注意的地方。app

Activity 的基本用法

跟着书走,先建立一个 ActivityTest 的项目,注意在选择 Activity 的时候,选择 Add No Activity。以下图ide

no activity

建立活动

在 app/src/mani/java/com.xxx.ActivityTest 目录上点击右键 → New,这里有两种选择:布局

  • 选择 Java Class,新建一个名为 FirstActivity 的类,并 extends Activity,重写 onCreate() 方法。代码能够参考以前的 HelloWorld。
  • 选择 Activity,系统会生成一个 Activity,以及相关的布局文件 Layout,并在 AndroidManifest.xml 中注册。

以下图this

new activity

建立和加载布局

新建立好的项目是没有 Layout 目录的,在 app/src/main/res 目录上点右键 → New → Android resource directory,在弹出的对话框中将 Resource type 选为 layout。code

而后在 res/Layout 目录上点右键 → New → Layout resource file,在弹出的对话框中填上名字,Finish,这样就建立好了。xml

打开文件,能够向里面添加一个 Button 控件试试看。htm

注册

Activity 必须在 AndroidManifest.xml 文件中注册才可使用,代码以下:

<activity
        android:name=".FirstActivity"
        android:label="FirstActivity" >
    </activity>

若是想让其在 App 运行时打开,还须要添加 intent-filter,代码以下:

<intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

隐藏标题栏

在 Activity 的 onCreate()方法中添加 requestWindowFeature(Window.FEATURE_NO_TITLE);

PS:在这里我遇到个坑,我建立的继承 Activity 的 活动默认就不显示标题栏,并且我也不知道怎么能让标题栏显示出来。

消息提示 Toast

Toast 是 Android 提供的一种很是好的提醒方式,在程序中可使用她将一些短小的信息通知给用户,这些信息会在一段时间后自动消失。

例子是这样的,在 onCreate() 方法中,给 Button 绑定一个点击事件,再点击 Button 时显示一条信息,代码以下:

Button button1 = (Button) findViewById(R.id.button_1);
    button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(FirstActivity.this, "you clicked button 1", Toast.LENGTH_SHORT).show();
        }
    });

PS:我多么但愿 HTML 中也有这样的元素啊。

我真心以为 Menu 没什么好讲的。

Activity 跳转

建立一个名为 SecondActivity 的 Activity(好绕口)。

例子是这样的,在 FirstActivity 中点击 Button 后跳转到 SecondActivity。代码以下:

button1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
            startActivity(intent);
        }
    });

传递数据

例子是这样的,在 FirstActivity 中点击 Button 后跳转到 SecondActivity,并将一个字符串传过去。
1.FirstActivity 中发送代码以下:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
    String data = "hello second";
    intent.putExtra("extra_data", data);
    startActivity(intent);

2.SecondActivity中,在 onCreate() 方法中,接收代码以下:

Intent intent = getIntent();
    String data = intent.getStringExtra("extra_data");

返回数据

须要用 startActivityForResult() 来代替 startActivity() 方法。

例子是这样的,在 FirstActivity 中点击 Button 后跳转到 SecondActivity,而后点击返回键返回到 FirstActivity,并返回一个字符串。

1.FirstActivity 中发送代码以下:

startActivityForResult(intent, 1);

其中的第二个参数 requestCode,用于在以后的回调方法中判断数据的来源。要保证在当前 Activity 中的惟一性。

2.SecondActivity中,重写点击返回键时触发的 onBackPressed() 方法,代码以下:

@Override
public void onBackPressed(){
    Intent intent = new Intent();
    intent.putExtra("data_return","hello first");
    setResult(RESULT_OK, intent);
    finish();
}

3.当从 SecondActivity 返回时,会回调上一个活动的 onActivityResult() 方法,因此须要重写 FirstActivity 的 onActivityResult() 方法来获取返回的数据,代码以下:

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

其它(Miscellaneous)

尽管我试图在本文中尽可能完整的进行描述,但受限于篇幅和个人我的水平,本文不免有所遗漏,欢迎在评论中指出。
若是您以为阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写做动力!

关于做者(About Me)

addict
原文连接:http://www.cnblogs.com/DebugLife/p/4349428.html

本文谢绝转载,如需转载需征得做者本人赞成,谢谢。

相关文章
相关标签/搜索