Activity和Intent

来源:互联网 发布:天翼飞young mac 编辑:程序博客网 时间:2024/05/29 21:34

(一)Activity的初步

 /*  * 创建Activity的要点  * 1.一个Activity就是一个类,并且这个类要继承Activity  * 2.要重写onCreate方法  * 3.每一个Activity都需要在AndroidManifest.xml中进行配置  * 4.为Activity添加必要的控件  */        @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        TextView myTextView=(TextView)findViewById(R.id.myTextView);        Button myButton=(Button)findViewById(R.id.myButton);        myTextView.setText("我的第一个TextView");        myButton.setText("我的第一个Button");            }

 //在AndroidManifest.xml中进行配置

<activity android:name=".ResultActivity">

//在main.xml中创建界面

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:orientation="vertical" >     <TextView        android:id="@+id/myTextView"        android:layout_width="fill_parent"        android:layout_height="wrap_content"      />        <Button         android:id="@+id/myButton"        android:layout_width="fill_parent"        android:layout_height="wrap_content"></Button></LinearLayout>

(二)Activity和Intent(做一个简单的乘法运算,并用Intent对象传递两个操作参数到另外一个Activity)


/*一个Intent对象包含了一组信息:
  * 1.Component name:启动另外的哪一个Activity
  * 2.Action:另外一个Activity要做什么
  * 3.Data:传递什么类型的数据
  * 4.Category
  * 5.Extras:存储key/value
  * 6.Flags
  */

a.新建一个Activity_03.xml,文件的内容如下:

 private EditText factorOne; private TextView symobol; private EditText factorTwo; private Button calculate;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        //通过ID取得代表控件的对象        factorOne=(EditText)this.findViewById(R.id.factorOne);        symobol=(TextView)this.findViewById(R.id.symbol);        factorTwo=(EditText)this.findViewById(R.id.factorTwo);        calculate=(Button)this.findViewById(R.id.calculate);        //为symobol和calculate设置显示的值(也可以在string.xml文件中设置它们显示的内容,通过id来 获得它们的值)        // symobol.setText("乘以");        // calculate.setText("计算");        symobol.setText(string.symbol);        calculate.setText(string.calculate);                //将监听器对象绑定到按钮对象        calculate.setOnClickListener(new CalculateListener());            }    //点击menu按钮时,调用该方法    @Override public boolean onCreateOptionsMenu(Menu menu) {  // TODO Auto-generated method stub     menu.add(0, 1, 1,R.string.exist);     menu.add(0, 2, 2,R.string.about);  return super.onCreateOptionsMenu(menu); }    //当点击菜单中的某一个选项时,会调用该方法(把你点击的那个选项作为参数传递过来) @Override public boolean onOptionsItemSelected(MenuItem item) {  // TODO Auto-generated method stub  if(item.getItemId()==0)  {   this.finish();  //结束Activity     }  return super.onOptionsItemSelected(item); } //创建一个内部类 class  CalculateListener implements OnClickListener {   public void onClick(View arg0) {   // TODO Auto-generated method stub   //取得两个EditText的值   String factorOneStr=factorOne.getText().toString();   String factorTwoStr=factorTwo.getText().toString();   //将两个值放到Intent对象中   Intent intent=new Intent();   intent.putExtra("one",factorOneStr);   intent.putExtra("two",factorTwoStr);   intent.setClass(Activity_03.this,ResultActivity.class);    //使用Intent对象来启动ResultActivity      Activity_03Activity.this.startActivity(intent);   } }}     

b.新建一个ResultActivity.xml
  //接收从Activity_03中传过来的两个值
  //计算两个值的积并输出

public class ResultActivity extends Activity{   private TextView resultView;    @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         this.setContentView(R.layout.result);         resultView=(TextView)this.findViewById(R.id.result);                  //得到Intent对象中的值         Intent intent=this.getIntent();         String factorOne=intent.getStringExtra("one").toString();         String factorTwo=intent.getStringExtra("two").toString();         int factorOneInt=Integer.parseInt(factorOne);         int factorTwoInt=Integer.parseInt(factorTwo);                  //计算两个值的积         int resultInt= factorOneInt*factorTwoInt;         resultView.setText(resultInt+"");   }}

(三)通过onSaveInstanceState()方法来保存Activity的状态(onSaveInstanceState()在onStop或onPause方法之前被调用,如果在应用程序的主界面,按返回,则不会被调用
 

    @Override    protected void onSaveInstanceState(Bundle outState) {    // TODO Auto-generated method stub    super.onSaveInstanceState(outState);       outState.putString(CONTENT,factorOne.getText().toString() );        }

则就可以在onCreate()方法中获得我们所保存的Activity的状态

        if(savedInstanceState!=null&&savedInstanceState.containsKey(CONTENT))        {        factorOne.setText(savedInstanceState.getString(CONTENT));        }