Activity

Activity 是android重要的组件之一,相当于ios中的controller,作为一种界面容器使用。

当程序中包含多个activity的时候,需要在配置文件中设置相应的参数,下面是配置的一个例子,要指定一个主activity。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.crazyit.activity"
    android:versionCode="1"
    android:versionName="1.0" >

    <application
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:name=".OtherActivity"
            android:label="@string/app_name" >

            <!-- 指定该Activity是程序的入口 -->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <!-- 定义两个Activity -->
        <activity
            android:name=".ExpandableListActivityTest"
            android:label="查看星际兵种" >
        </activity>
        <activity
            android:name=".PreferenceActivityTest"
            android:label="设置程序参数" >
        </activity>
    </application>

</manifest>

其中<intent-filter>....</intent-filter>标签中包含的就是设置主activity的。

下面是一段由一个activity启动第二个activity的代码

public class StartActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//获取应用程序中的bn按钮
		Button bn = (Button)findViewById(R.id.bn);
		//为bn按钮绑定事件监听器
		bn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View source)
			{
				//创建需要启动的Activity对应的Intent
				Intent intent = new Intent(StartActivity.this
					, SecondActivity.class);
				//启动intent对应的Activity
				startActivity(intent);				
			}		
		});
	}
}
public class SecondActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.second);
		//获取应用程序中的previous按钮
		Button previous = (Button)findViewById(R.id.previous);
		//获取应用程序中的close按钮
		Button close = (Button)findViewById(R.id.close);
		//为previous按钮绑定事件监听器
		previous.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View source)
			{
				//获取启动当前Activity的上一个Intent
				Intent intent = new Intent(SecondActivity.this
					, StartActivity.class);
				//启动intent对应的Activity
				startActivity(intent);				
			}
		});
		//为close按钮绑定事件监听器	
		close.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View source)
			{
				//获取启动当前Activity的上一个Intent
				Intent intent = new Intent(SecondActivity.this
					, StartActivity.class);
				//启动intent对应的Activity
				startActivity(intent);
				//结束当前Activity
				finish();
			}
		});	
	}
}

如果在启动其他activity之后加上finish()函数,那么就会结束自己。

使用bundle在两个activity之间传输数据。

public class BundleTest extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button bn = (Button)findViewById(R.id.bn);
		bn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v)
			{
				EditText name = (EditText)findViewById(R.id.name);
				EditText passwd = (EditText)findViewById(R.id.passwd);
				RadioButton male = (RadioButton)findViewById(R.id.male);
				String gender = male.isChecked() ? "男 " : "女";
				Person p = new Person(name.getText().toString()
					, passwd.getText().toString() , gender);
				//创建一个Bundle对象
				Bundle data = new Bundle();
				data.putSerializable("person", p);
				//创建一个Intent
				Intent intent = new Intent(BundleTest.this
					, ResultActivity.class);
				intent.putExtras(data);
				//启动intent对应的Activity
				startActivity(intent);			
			}
		});		
	}
}
发送方将数据打包之后,通过bundle把数据打包,然后使用intent来传输。

下面是接收方的数据处理

public class ResultActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.result);
		TextView name = (TextView)findViewById(R.id.name);
		TextView passwd = (TextView)findViewById(R.id.passwd);
		TextView gender = (TextView)findViewById(R.id.gender);
		//获取启动该Result的Intent
		Intent intent = getIntent();
		//获取该intent所携带的数据
		Bundle data = intent.getExtras();
		//从Bundle数据包中取出数据
		Person p = (Person)data.getSerializable("person");
		name.setText("您的用户名为:" + p.getName());
		passwd.setText("您的密码为:" + p.getPass());
		gender.setText("您的性别为:" + p.getGender());
	}
}
上面是从一个activity向下一个activity传数据,下面的例子是后一个activity做完一些操作后,向他的前一个activity回传数据。

bn = (Button)findViewById(R.id.bn);
		city = (EditText)findViewById(R.id.city);
		//为按钮绑定事件监听器
		bn.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View source)
			{
				//创建需要对应于目标Activity的Intent
				Intent intent = new Intent(ActivityForResult.this
 , SelectCityActivity.class);//启动指定Activity并等待返回的结果,其中0是请求码,用于标识该请求startActivityForResult(intent , 0);}});
	//重写该方法,该方法以回调的方式来获取指定Activity返回的结果
	@Override
	public void onActivityResult(int requestCode , int resultCode
		, Intent intent)
	{
		//当requestCode、resultCode同时为0,也就是处理特定的结果
		if (requestCode == 0
			&& resultCode == 0)
		{
			//取出Intent里的Extras数据
			Bundle data = intent.getExtras();
			//取出Bundle中的数据
			String resultCity = data.getString("city");
			//修改city文本框的内容
			city.setText(resultCity);
		}
	}
使用requestcode和resultcode可以唯一确定是哪个activity回传过来的信息。在第二个activity中使用下面的代码来处理并回传数据。

		getExpandableListView().setOnChildClickListener(
			new OnChildClickListener()
		{
			@Override
			public boolean onChildClick(ExpandableListView parent, View source,
				int groupPosition, int childPosition, long id)
			{
				//获取启动该Activity之前的Activity对应的Intent
				Intent intent = getIntent();
				Bundle data = new Bundle();
				data.putString("city" ,cities[groupPosition][childPosition]);
				intent.putExtras(data);
				// 设置该SelectActivity的结果码,并设置结束之后退回的Activity
				SelectCityActivity.this.setResult(0 , intent);
				//结束SelectCityActivity。
				SelectCityActivity.this.finish();
				return false;
			}
		});

最后看下activity的生命周期



这个图片已经很清楚说明一个activity的生命周期中会调用的函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值