Activity与Intent——android学习

package com.example.activitytest;


import com.example.test1.R;//注意:并不是android.R

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class FirstActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);//隐藏APP标题
		setContentView(R.layout.first_layout);//开始时载入first_layout
		//button点击事件的用法:
		Button button1 =(Button)findViewById(R.id.button_1);
		button1.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				//Toast的用法
				Toast.makeText(FirstActivity.this, "You clicked the button 1", 
						Toast.LENGTH_SHORT).show();
				//finish();//销毁当前活动,若你不想通过Back,也可以这么干
			}
		});
	}
	//菜单
	public boolean onCreatOptionsMenu(Menu menu){
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item){
		switch(item.getItemId()){
		case R.id.add_item:
			Toast.makeText(this, "You clicked Add", Toast.LENGTH_SHORT).show();
			break;
		case R.id.remove_item:
			Toast.makeText(this, "You clicked Remove", Toast.LENGTH_SHORT).show();
			break;
		default:
		}
		return true;
	}

}


所有的activity都要放在AndroidManifest.xml才能生效。

androidManifest.xml:

活动申明要放在<application>内,label用来改变当前活动名。

         <activity
            android:name=".FirstActicity"
            android:label="This is FirstActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
         </activity>


Menu:

手动创建:在res目录下新建一个menu文件夹,res->New->Floder,输入文件夹名:menu,然后Finish。

                     然后menu文件夹->New->Android XML File,输入菜单文件名,然后Finish

在menu xml文件下使用item标签:如下例子:

分别创建了名为Add和名为Remove的菜单。

    <item
        android:id="@+id/add_item"
        android:title="Add"/>
    <item
        android:id="@+id/remove_item"
        android:title="Remove"/>
菜单响应在FirstActivity内的onCreateOptionsMenu()方法和onOptionsItemSelected()方法。


Intent

<span style="font-size:14px;">        Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
	//隐式Intent:
	//Intent intent = new Intent("com.example.testapp.MY_ACTION");
	//intent.addCategory("com.example.testapp.MY_CATEGORY");
	startActivity(intent);</span>

隐式Intent:

要隐式启动SecondActivity,就要在AndroidManifest.xml的secondActivity下配置<intent-fliter>:

default的category必须要写,否则报错

<intent-filter>
      <action android:name="com.example.testapp.MY_ACTION"/>
      <category android:name="android.intent.category.DEFAULT"/>
      <category android:name="com.example.testapp.MY_CATEGORY"/>
</intent-filter>


利用Intent传递数据给下一个活动

intent提供了一系列putExtra()方法的重载,可以把我们想要的数据暂存在Intent中

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

SecondActivity通过getIntent()方法获取到哪个activity启动了secondActivity的intent,然后调用getStringExtra()方法传入相应的键值,来获取String数据

Intent intent = getIntent();
String data ="hello";
data = intent.getStringExtra("extra_data");
Toast.makeText(SecondActivity.this, data, Toast.LENGTH_LONG).show();


利用Intent返回数据给上一个活动

startActivityForResult()方法接收两个参数,第一个参数是Intent,第二个是请求码,用于回调中判断数据的来源。请求码必须是唯一值。

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);


启动的SecondActivity,调用setResult()用于向上一个活动返回数据,它只接收两个参数,第一个是向上一个活动返回处理结果,一般只使用RESULT_OK和RESULT_CANCELED这两个值,第二个参数是把带有数据的Intent传回去。

Intent intent = new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);

在一个活动被销毁之后会回调上一个活动的onActivityResult()方法,因此需要在FirstActivity中重写这个方法来得到返回数据

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data){
    	switch(requestCode){
    	case 1:
    		if(resultCode == RESULT_OK){
    			String returnData = "hello";
    			returnData = data.getStringExtra("data_return");
    			Toast.makeText(this, returnData, Toast.LENGTH_LONG).show();
    		}
    		break;
    	default:Toast.makeText(this, "Error", Toast.LENGTH_LONG).show();
    	}
    }

参考资料《第一行代码--android》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值