秦朝古月 发表于 2013-1-15 02:26:23

学习Activity

今天继续看了Android的教程,学会了下边一些东西。

[*]使用XML 布局创建一个简单的应用程序
[*]用基于Java 的布局来创建
[*]运行Android 应用程序
[*]使用Logcat 来调试
[*]使用Intent 来开启(子)Activity
[*]找到在XML 中定义的View、在Java 代码中使用它们
[*]为View 处理点击事件
[*]从SubActivity 返回值
[*]使用Bundle 传递数据给SubActivity


Activity 状态
① 当一个Activity 在屏幕的最上层时(对堆栈的最顶端),它就是属于active 或者running 的状态
② 如果一个Activity 失去焦点(focus)但还看得到它的画面(比如:一个新的Activity 画面并不是全屏幕或者它是一个半透明的情况),那失去焦点的Activity 则处在paused 的状态。像这个失去焦点的Activity它还是完全活着的,并没有消失。(活着的意思是指,Activity 自己本身所有的状态及数据都还是存在的,也跟窗口管理程序window manager 保持联系着),像这种paused 的Activity,会在一种情况下消失,那就是当系统的内存不够用之时,系统会自动判断,八部重要的Activity 移除。
③ 如果一个Activity 被其它的Activity 完全的遮盖住时,它仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以它的画面是被隐藏起来的(画面不需要更新),当系统内存不足时,这种stop 状态的Activity 时最先被系统考虑拿下来释放内存的。
④ 当一个Activity 处于pause 或stop 的状态时,系统可以要求Activity 结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,它必须要能完整的重新启动及回复先前的状态。

跟着教程实现了一个小程序,可以打开一个子Activity (屏幕),输入我们想查找的字符串。提交后使用Google 进行搜索,并把主Activity 的Title 改为该字符串。
src/peng/test/StartingSubactivities.java 主Activity 类代码
package peng.test;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class StartingSubactivities extends Activity   implements OnClickListener {private Button open;private Intent toIntent;private static final int MYSECONDACTIVITY_REQUESTCODE = 1;    @Override    public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.main);      open = (Button)this.findViewById(R.id.btn_open_search);      open.setOnClickListener(this);    }    @Override    public void onClick(View v) {      toIntent = new Intent();       toIntent.setClass(StartingSubactivities.this, MySecondActivity.class);       startActivityForResult(toIntent, MYSECONDACTIVITY_REQUESTCODE);    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {      super.onActivityResult(requestCode, resultCode, data);    Log.d("DEBUGTAG", "RequestCode = " + requestCode);    switch (requestCode) {      case MYSECONDACTIVITY_REQUESTCODE:            Log.d("DEBUGTAG", "ResultCode = " + resultCode);            if (resultCode == RESULT_CANCELED) {                  setTitle("Result Canceled");            } else {                String getStringFrom = data.getStringExtra("GET_TEXT");                setTitle(getStringFrom);                Intent webIntent = new Intent(Intent.ACTION_VIEW,                                       Uri.parse("http://www.google.com/search?q=" + getStringFrom));                startActivity(webIntent);            }      break;      }}}
res/layout/main.xml 主Activity 的Layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><TextView      android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:text="@string/hello"    /><Button    android:id="@+id/btn_open_search"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="Open Search-Dialog"   /></LinearLayout>
src/peng/test/MySecondActivity.java 子Activity 类代码
package peng.test;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class MySecondActivity extends Activityimplements OnClickListener {private EditText getText;private Button back;private String getString;private Intent backIntent;private Bundle backBundle;@Override    public void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      setContentView(R.layout.second);      getText = (EditText)findViewById(R.id.et_keyword);      back = (Button)findViewById(R.id.btn_return);      back.setOnClickListener(this);    }    @Override    public void onClick(View v) {      if (v.getId() == R.id.btn_return) {            getString = getText.getText().toString();            backIntent = new Intent();            backBundle = new Bundle();            backBundle.putString("GET_TEXT", getString);            backIntent.putExtras(backBundle);            setResult(RESULT_OK, backIntent);            Log.d("DEBUGTAG", "Input String = " + getString);            finish();      }    }}
res/layout/second.xml 子Activity 的Layout
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    ><EditText    android:id="@+id/et_keyword"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    /><Button    android:id="@+id/btn_return"    android:layout_width="fill_parent"    android:layout_height="wrap_content"    android:text="Submit"    /></LinearLayout>
页: [1]
查看完整版本: 学习Activity